From 54dffa07f309c90677ae57eea8feb41acc5be717 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 8 Jul 2021 17:59:50 -0400 Subject: [PATCH] composetable: Drop GtkComposeTableCompact All tables use the compact format now, and we generate caches in that format too. Bump the cache version to 3 for this. Replace the python script for generating the builtin table by a small C program using the same code to generate the data for the builtin table. This drops the restriction on only generating a single character in the builtin sequences. --- gtk/compose/chars | Bin 0 -> 1573 bytes gtk/compose/compose-parse.c | 63 + gtk/compose/compose-parse.py | 984 --- gtk/compose/gtk-compose-lookaside.txt | 405 -- gtk/compose/gtkcomposedata.h | 9 + gtk/compose/meson.build | 7 + gtk/compose/sequences | Bin 0 -> 33042 bytes gtk/gen-gtk-gresources-xml.py | 2 + gtk/gtkcomposetable.c | 532 +- gtk/gtkcomposetable.h | 75 +- gtk/gtkimcontextsimple.c | 80 +- gtk/gtkimcontextsimple.h | 8 +- gtk/meson.build | 2 + testsuite/gtk/compose/basic.expected | 4 +- testsuite/gtk/compose/codepoint.expected | 4 +- testsuite/gtk/compose/comments.expected | 4 +- testsuite/gtk/compose/cycle | 2 +- testsuite/gtk/compose/hex.expected | 4 +- testsuite/gtk/compose/include | 2 +- testsuite/gtk/compose/include.expected | 4 +- testsuite/gtk/compose/long.expected | 4 +- testsuite/gtk/compose/match.expected | 10 +- testsuite/gtk/compose/multi.expected | 8 +- testsuite/gtk/compose/octal.expected | 4 +- testsuite/gtk/compose/strings.expected | 8 +- testsuite/gtk/compose/system.expected | 8375 ++++++++++++---------- testsuite/gtk/composetable.c | 147 +- 27 files changed, 5014 insertions(+), 5733 deletions(-) create mode 100644 gtk/compose/chars create mode 100644 gtk/compose/compose-parse.c delete mode 100755 gtk/compose/compose-parse.py delete mode 100644 gtk/compose/gtk-compose-lookaside.txt create mode 100644 gtk/compose/gtkcomposedata.h create mode 100644 gtk/compose/meson.build create mode 100644 gtk/compose/sequences diff --git a/gtk/compose/chars b/gtk/compose/chars new file mode 100644 index 0000000000000000000000000000000000000000..9f9b15314f235cd2b0a39e90163a64fd8a8c8fa2 GIT binary patch literal 1573 zcmciCv2N2)7=~fr8Uq7Jh=~heV4xCWVvpk}K$E5}B36)9CsL-+q>T-M0F}3bKpv7S zNiKo+J-}R~N*%uE*s_oR{~SAc(6pjwH^14$*5QYv6->_o_A2CNNwz}mp0tq)*V{5=#YM>A# zo~AOCkrXnKsVtil=fYZQU@jz{rZSX~6f%)1>^@&c|GwGV`P%m5Y#8n43F(B=mcPl1 z|KHccef$+%|3|T#x9BYjmC3!_&lS9%cM`Xa9_he4a$RgU0-`(sB-jCnR M{yx#CWmy#c25@as;s5{u literal 0 HcmV?d00001 diff --git a/gtk/compose/compose-parse.c b/gtk/compose/compose-parse.c new file mode 100644 index 0000000000..55e9331f3e --- /dev/null +++ b/gtk/compose/compose-parse.c @@ -0,0 +1,63 @@ +#include +#include "gtk/gtkcomposetable.h" +#include + +/* This program reads a Compose file and generates files with sequences, + * character data, and definitions for the builtin compose table of GTK. + * Run it like this: + * + * compose-parse Compose sequences chars gtkcomposedata.h + * + * The GTK build expects the output files to be in the source tree, in + * the gtk/compose directory. + */ +int +main (int argc, char *argv[]) +{ + GtkComposeTable *table; + GError *error = NULL; + GString *str; + + setlocale (LC_ALL, ""); + + if (argc < 5) + { + g_print ("Usage: compose-parse INPUT OUTPUT1 OUTPUT2 OUTPUT3\n"); + exit (1); + } + + table = gtk_compose_table_parse (argv[1]); + if (!table) + g_error ("Failed to parse %s", argv[1]); + + /* data_size is the size in guint16 */ + if (!g_file_set_contents (argv[2], (char *)table->data, 2 * table->data_size, &error)) + g_error ("%s", error->message); + + if (!g_file_set_contents (argv[3], table->char_data, table->n_chars + 1, &error)) + g_error ("%s", error->message); + + str = g_string_new (""); + g_string_append (str, + "#ifndef __GTK_COMPOSE_DATA__\n" + "#define __GTK_COMPOSE_DATA__\n" + "\n"); + g_string_append_printf (str, + "#define MAX_SEQ_LEN %d\n", table->max_seq_len); + g_string_append_printf (str, + "#define N_INDEX_SIZE %d\n", table->n_index_size); + g_string_append_printf (str, + "#define DATA_SIZE %d\n", table->data_size); + g_string_append_printf (str, + "#define N_CHARS %d\n", table->n_chars); + g_string_append (str, + "\n" + "#endif\n"); + + if (!g_file_set_contents (argv[4], str->str, str->len, &error)) + g_error ("%s", error->message); + + g_string_free (str, TRUE); + + return 0; +} diff --git a/gtk/compose/compose-parse.py b/gtk/compose/compose-parse.py deleted file mode 100755 index 23444bc1ed..0000000000 --- a/gtk/compose/compose-parse.py +++ /dev/null @@ -1,984 +0,0 @@ -#!/usr/bin/env python2 -# -*- coding: utf-8 -*- -# -# compose-parse.py, version 1.4 -# -# multifunction script that helps manage the compose sequence table in GTK+ (gtk/gtkimcontextsimple.c) -# the script produces statistics and information about the whole process, run with --help for more. -# -# You may need to switch your python installation to utf-8, if you get 'ascii' codec errors. -# -# Complain to Simos Xenitellis (simos@gnome.org, http://simos.info/blog) for this craft. - -from re import findall, match, split, sub -from string import atoi -from unicodedata import normalize -from urllib import urlretrieve -from os.path import isfile, getsize -from copy import copy - -import sys -import getopt - -# We grab files off the web, left and right. -URL_COMPOSE = 'http://cgit.freedesktop.org/xorg/lib/libX11/plain/nls/en_US.UTF-8/Compose.pre' -URL_KEYSYMSTXT = "http://www.cl.cam.ac.uk/~mgk25/ucs/keysyms.txt" -URL_GDKKEYSYMSH = "http://git.gnome.org/browse/gtk%2B/plain/gdk/gdkkeysyms.h" -URL_UNICODEDATATXT = 'http://www.unicode.org/Public/6.0.0/ucd/UnicodeData.txt' -FILENAME_COMPOSE_SUPPLEMENTARY = 'gtk-compose-lookaside.txt' -FILENAME_COMPOSE_NEGATIVE_SUPPLEMENTARY = 'gtk-compose-remove.txt' - -# We currently support keysyms of size 2; once upstream xorg gets sorted, -# we might produce some tables with size 2 and some with size 4. -SIZEOFINT = 2 - -# Current max compose sequence length; in case it gets increased. -WIDTHOFCOMPOSETABLE = 5 - -keysymdatabase = {} -keysymunicodedatabase = {} -unicodedatabase = {} - -headerfile_start = """/* GTK - The GIMP Tool Kit - * Copyright (C) 2007, 2008 GNOME Foundation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - */ - -/* - * File auto-generated from script found at http://bugzilla.gnome.org/show_bug.cgi?id=321896 - * using the input files - * Input : http://cgit.freedesktop.org/xorg/lib/libX11/plain/nls/en_US.UTF-8/Compose.pre - * Input : http://www.cl.cam.ac.uk/~mgk25/ucs/keysyms.txt - * Input : http://www.unicode.org/Public/UNIDATA/UnicodeData.txt - * - * This table is optimised for space and requires special handling to access the content. - * This table is used solely by http://svn.gnome.org/viewcvs/gtk%2B/trunk/gtk/gtkimcontextsimple.c - * - * The resulting file is placed at http://svn.gnome.org/viewcvs/gtk%2B/trunk/gtk/gtkimcontextsimpleseqs.h - * This file is described in bug report http://bugzilla.gnome.org/show_bug.cgi?id=321896 - */ - -/* - * Modified by the GTK+ Team and others 2007, 2008. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GTK_IM_CONTEXT_SIMPLE_SEQS_H__ -#define __GTK_IM_CONTEXT_SIMPLE_SEQS_H__ - -/* === These are the original comments of the file; we keep for historical purposes === - * - * The following table was generated from the X compose tables include with - * XFree86 4.0 using a set of Perl scripts. Contact Owen Taylor - * to obtain the relevant perl scripts. - * - * The following compose letter letter sequences conflicted - * Dstroke/dstroke and ETH/eth; resolved to Dstroke (Croatian, Vietnamese, Lappish), over - * ETH (Icelandic, Faroese, old English, IPA) [ D- -D d- -d ] - * Amacron/amacron and ordfeminine; resolved to ordfeminine [ _A A_ a_ _a ] - * Amacron/amacron and Atilde/atilde; resolved to atilde [ -A A- a- -a ] - * Omacron/Omacron and masculine; resolved to masculine [ _O O_ o_ _o ] - * Omacron/omacron and Otilde/atilde; resolved to otilde [ -O O- o- -o ] - * - * [ Amacron and Omacron are in Latin-4 (Baltic). ordfeminine and masculine are used for - * spanish. atilde and otilde are used at least for Portuguese ] - * - * at and Aring; resolved to Aring [ AA ] - * guillemotleft and caron; resolved to guillemotleft [ << ] - * ogonek and cedilla; resolved to cedilla [ ,, ] - * - * This probably should be resolved by first checking an additional set of compose tables - * that depend on the locale or selected input method. - */ - -static const guint16 gtk_compose_seqs_compact[] = {""" - -headerfile_end = """}; - -#endif /* __GTK_IM_CONTEXT_SIMPLE_SEQS_H__ */ -""" - -def stringtohex(str): return atoi(str, 16) - -def factorial(n): - if n <= 1: - return 1 - else: - return n * factorial(n-1) - -def uniq(*args) : - """ Performs a uniq operation on a list or lists """ - theInputList = [] - for theList in args: - theInputList += theList - theFinalList = [] - for elem in theInputList: - if elem not in theFinalList: - theFinalList.append(elem) - return theFinalList - - - -def all_permutations(seq): - """ Borrowed from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/252178 """ - """ Produces all permutations of the items of a list """ - if len(seq) <=1: - yield seq - else: - for perm in all_permutations(seq[1:]): - for i in range(len(perm)+1): - #nb str[0:1] works in both string and list contexts - yield perm[:i] + seq[0:1] + perm[i:] - -def usage(): - print """compose-parse available parameters: - -h, --help this craft - -s, --statistics show overall statistics (both algorithmic, non-algorithmic) - -a, --algorithmic show sequences saved with algorithmic optimisation - -g, --gtk show entries that go to GTK+ - -u, --unicodedatatxt show compose sequences derived from UnicodeData.txt (from unicode.org) - -v, --verbose show verbose output - -p, --plane1 show plane1 compose sequences - -n, --numeric when used with --gtk, create file with numeric values only - -e, --gtk-expanded when used with --gtk, create file that repeats first column; not usable in GTK+ - - Default is to show statistics. - """ - -try: - opts, args = getopt.getopt(sys.argv[1:], "pvgashune", ["help", "algorithmic", "statistics", "unicodedatatxt", - "stats", "gtk", "verbose", "plane1", "numeric", "gtk-expanded"]) -except: - usage() - sys.exit(2) - -opt_statistics = False -opt_algorithmic = False -opt_gtk = False -opt_unicodedatatxt = False -opt_verbose = False -opt_plane1 = False -opt_numeric = False -opt_gtkexpanded = False - -for o, a in opts: - if o in ("-h", "--help"): - usage() - sys.exit() - if o in ("-s", "--statistics"): - opt_statistics = True - if o in ("-a", "--algorithmic"): - opt_algorithmic = True - if o in ("-g", "--gtk"): - opt_gtk = True - if o in ("-u", "--unicodedatatxt"): - opt_unicodedatatxt = True - if o in ("-v", "--verbose"): - opt_verbose = True - if o in ("-p", "--plane1"): - opt_plane1 = True - if o in ("-n", "--numeric"): - opt_numeric = True - if o in ("-e", "--gtk-expanded"): - opt_gtkexpanded = True - -if not opt_algorithmic and not opt_gtk and not opt_unicodedatatxt: - opt_statistics = True - -def download_hook(blocks_transferred, block_size, file_size): - """ A download hook to provide some feedback when downloading """ - if blocks_transferred == 0: - if file_size > 0: - if opt_verbose: - print "Downloading", file_size, "bytes: ", - else: - if opt_verbose: - print "Downloading: ", - sys.stdout.write('#') - sys.stdout.flush() - - -def download_file(url): - """ Downloads a file provided a URL. Returns the filename. """ - """ Borks on failure """ - localfilename = url.split('/')[-1] - if not isfile(localfilename) or getsize(localfilename) <= 0: - if opt_verbose: - print "Downloading ", url, "..." - try: - urlretrieve(url, localfilename, download_hook) - except IOError, (errno, strerror): - print "I/O error(%s): %s" % (errno, strerror) - sys.exit(-1) - except: - print "Unexpected error: ", sys.exc_info()[0] - sys.exit(-1) - print " done." - else: - if opt_verbose: - print "Using cached file for ", url - return localfilename - -def process_gdkkeysymsh(): - """ Opens the gdkkeysyms.h file from GTK+/gdk/gdkkeysyms.h """ - """ Fills up keysymdb with contents """ - filename_gdkkeysymsh = download_file(URL_GDKKEYSYMSH) - try: - gdkkeysymsh = open(filename_gdkkeysymsh, 'r') - except IOError, (errno, strerror): - print "I/O error(%s): %s" % (errno, strerror) - sys.exit(-1) - except: - print "Unexpected error: ", sys.exc_info()[0] - sys.exit(-1) - - """ Parse the gdkkeysyms.h file and place contents in keysymdb """ - linenum_gdkkeysymsh = 0 - keysymdb = {} - for line in gdkkeysymsh.readlines(): - linenum_gdkkeysymsh += 1 - line = line.strip() - if line == "" or not match('^#define GDK_KEY_', line): - continue - components = split('\s+', line) - if len(components) < 3: - print "Invalid line %(linenum)d in %(filename)s: %(line)s"\ - % {'linenum': linenum_gdkkeysymsh, 'filename': filename_gdkkeysymsh, 'line': line} - print "Was expecting 3 items in the line" - sys.exit(-1) - if not match('^GDK_KEY_', components[1]): - print "Invalid line %(linenum)d in %(filename)s: %(line)s"\ - % {'linenum': linenum_gdkkeysymsh, 'filename': filename_gdkkeysymsh, 'line': line} - print "Was expecting a keysym starting with GDK_KEY_" - sys.exit(-1) - if match('^0x[0-9a-fA-F]+$', components[2]): - unival = long(components[2][2:], 16) - if unival == 0: - continue - keysymdb[components[1][8:]] = unival - else: - print "Invalid line %(linenum)d in %(filename)s: %(line)s"\ - % {'linenum': linenum_gdkkeysymsh, 'filename': filename_gdkkeysymsh, 'line': line} - print "Was expecting a hexadecimal number at the end of the line" - sys.exit(-1) - gdkkeysymsh.close() - - """ Patch up the keysymdb with some of our own stuff """ - - """ This is for a missing keysym from the currently upstream file """ - ###keysymdb['dead_stroke'] = 0x338 - - """ This is for a missing keysym from the currently upstream file """ - ###keysymdb['dead_belowring'] = 0x323 - ###keysymdb['dead_belowmacron'] = 0x331 - ###keysymdb['dead_belowcircumflex'] = 0x32d - ###keysymdb['dead_belowtilde'] = 0x330 - ###keysymdb['dead_belowbreve'] = 0x32e - ###keysymdb['dead_belowdiaeresis'] = 0x324 - - """ This is^Wwas preferential treatment for Greek """ - # keysymdb['dead_tilde'] = 0x342 - """ This is^was preferential treatment for Greek """ - #keysymdb['combining_tilde'] = 0x342 - - """ Fixing VoidSymbol """ - keysymdb['VoidSymbol'] = 0xFFFF - - return keysymdb - -def process_keysymstxt(): - """ Grabs and opens the keysyms.txt file that Markus Kuhn maintains """ - """ This file keeps a record between keysyms <-> unicode chars """ - filename_keysymstxt = download_file(URL_KEYSYMSTXT) - try: - keysymstxt = open(filename_keysymstxt, 'r') - except IOError, (errno, strerror): - print "I/O error(%s): %s" % (errno, strerror) - sys.exit(-1) - except: - print "Unexpected error: ", sys.exc_info()[0] - sys.exit(-1) - - """ Parse the keysyms.txt file and place content in keysymdb """ - linenum_keysymstxt = 0 - keysymdb = {} - for line in keysymstxt.readlines(): - linenum_keysymstxt += 1 - line = line.strip() - if line == "" or match('^#', line): - continue - components = split('\s+', line) - if len(components) < 5: - print "Invalid line %(linenum)d in %(filename)s: %(line)s'"\ - % {'linenum': linenum_keysymstxt, 'filename': filename_keysymstxt, 'line': line} - print "Was expecting 5 items in the line" - sys.exit(-1) - if match('^U[0-9a-fA-F]+$', components[1]): - unival = long(components[1][1:], 16) - if unival == 0: - continue - keysymdb[components[4]] = unival - keysymstxt.close() - - """ Patch up the keysymdb with some of our own stuff """ - """ This is for a missing keysym from the currently upstream file """ - keysymdb['dead_belowring'] = 0x323 - keysymdb['dead_belowmacron'] = 0x331 - keysymdb['dead_belowcircumflex'] = 0x32d - keysymdb['dead_belowtilde'] = 0x330 - keysymdb['dead_belowbreve'] = 0x32e - keysymdb['dead_belowdiaeresis'] = 0x324 - - """ This is preferential treatment for Greek """ - """ => we get more savings if used for Greek """ - # keysymdb['dead_tilde'] = 0x342 - """ This is preferential treatment for Greek """ - # keysymdb['combining_tilde'] = 0x342 - - """ This is for a missing keysym from Markus Kuhn's db """ - keysymdb['dead_stroke'] = 0x338 - """ This is for a missing keysym from Markus Kuhn's db """ - keysymdb['Oslash'] = 0x0d8 - """ This is for a missing keysym from Markus Kuhn's db """ - keysymdb['Ssharp'] = 0x1e9e - - """ This is for a missing (recently added) keysym """ - keysymdb['dead_psili'] = 0x313 - """ This is for a missing (recently added) keysym """ - keysymdb['dead_dasia'] = 0x314 - - """ Allows to import Multi_key sequences """ - keysymdb['Multi_key'] = 0xff20 - - keysymdb['zerosubscript'] = 0x2080 - keysymdb['onesubscript'] = 0x2081 - keysymdb['twosubscript'] = 0x2082 - keysymdb['threesubscript'] = 0x2083 - keysymdb['foursubscript'] = 0x2084 - keysymdb['fivesubscript'] = 0x2085 - keysymdb['sixsubscript'] = 0x2086 - keysymdb['sevensubscript'] = 0x2087 - keysymdb['eightsubscript'] = 0x2088 - keysymdb['ninesubscript'] = 0x2089 - keysymdb['dead_doublegrave'] = 0x030F - keysymdb['dead_invertedbreve'] = 0x0311 - keysymdb['dead_belowcomma'] = 0xfe6e - keysymdb['dead_currency'] = 0xfe6f - keysymdb['dead_greek'] = 0xfe8c - - return keysymdb - -def keysymvalue(keysym, file = "n/a", linenum = 0): - """ Extracts a value from the keysym """ - """ Find the value of keysym, using the data from keysyms """ - """ Use file and linenum to when reporting errors """ - if keysym == "": - return 0 - if keysymdatabase.has_key(keysym): - return keysymdatabase[keysym] - elif keysym[0] == 'U' and match('[0-9a-fA-F]+$', keysym[1:]): - return atoi(keysym[1:], 16) - elif keysym[:2] == '0x' and match('[0-9a-fA-F]+$', keysym[2:]): - return atoi(keysym[2:], 16) - else: - print 'keysymvalue: UNKNOWN{%(keysym)s}' % { "keysym": keysym } - #return -1 - sys.exit(-1) - -def keysymunicodevalue(keysym, file = "n/a", linenum = 0): - """ Extracts a value from the keysym """ - """ Find the value of keysym, using the data from keysyms """ - """ Use file and linenum to when reporting errors """ - if keysym == "": - return 0 - if keysymunicodedatabase.has_key(keysym): - return keysymunicodedatabase[keysym] - elif keysym[0] == 'U' and match('[0-9a-fA-F]+$', keysym[1:]): - return atoi(keysym[1:], 16) - elif keysym[:2] == '0x' and match('[0-9a-fA-F]+$', keysym[2:]): - return atoi(keysym[2:], 16) - else: - print 'keysymunicodevalue: UNKNOWN{%(keysym)s}' % { "keysym": keysym } - sys.exit(-1) - -def rename_combining(seq): - filtered_sequence = [] - for ks in seq: - if findall('^combining_', ks): - ks = sub('^combining_', 'dead_', ks) - if ks == 'dead_double_grave': - ks = 'dead_doublegrave' - if ks == 'dead_inverted_breve': - ks = 'dead_invertedbreve' - filtered_sequence.append(ks) - return filtered_sequence - - -keysymunicodedatabase = process_keysymstxt() -keysymdatabase = process_gdkkeysymsh() - -""" Grab and open the compose file from upstream """ -filename_compose = download_file(URL_COMPOSE) -try: - composefile = open(filename_compose, 'r') -except IOError, (errno, strerror): - print "I/O error(%s): %s" % (errno, strerror) - sys.exit(-1) -except: - print "Unexpected error: ", sys.exc_info()[0] - sys.exit(-1) - -""" Look if there is a lookaside (supplementary) compose file in the current - directory, and if so, open, then merge with upstream Compose file. -""" -xorg_compose_sequences_raw = [] -for seq in composefile.readlines(): - xorg_compose_sequences_raw.append(seq) - -try: - composefile_lookaside = open(FILENAME_COMPOSE_NEGATIVE_SUPPLEMENTARY, 'r') - for seq in composefile_lookaside.readlines(): - xorg_compose_sequences_raw.remove(seq) -except IOError, (errno, strerror): - if opt_verbose: - print "I/O error(%s): %s" % (errno, strerror) - print "Did not find negative lookaside compose file. Continuing..." -except: - print "Unexpected error: ", sys.exc_info()[0] - sys.exit(-1) - -try: - composefile_lookaside = open(FILENAME_COMPOSE_SUPPLEMENTARY, 'r') - for seq in composefile_lookaside.readlines(): - xorg_compose_sequences_raw.append(seq) -except IOError, (errno, strerror): - if opt_verbose: - print "I/O error(%s): %s" % (errno, strerror) - print "Did not find lookaside compose file. Continuing..." -except: - print "Unexpected error: ", sys.exc_info()[0] - sys.exit(-1) - -""" Parse the compose file in xorg_compose_sequences""" -xorg_compose_sequences = [] -xorg_compose_sequences_algorithmic = [] -linenum_compose = 0 -comment_nest_depth = 0 -for line in xorg_compose_sequences_raw: - linenum_compose += 1 - line = line.strip() - if match("^XCOMM", line) or match("^#", line): - continue - - line = sub(r"\/\*([^\*]*|[\*][^/])\*\/", "", line) - - comment_start = line.find("/*") - - if comment_start >= 0: - if comment_nest_depth == 0: - line = line[:comment_start] - else: - line = "" - - comment_nest_depth += 1 - else: - comment_end = line.find("*/") - - if comment_end >= 0: - comment_nest_depth -= 1 - - if comment_nest_depth < 0: - print "Invalid comment %(linenum_compose)d in %(filename)s: \ - Closing '*/' without opening '/*'" % { "linenum_compose": linenum_compose, "filename": filename_compose } - exit(-1) - - if comment_nest_depth > 0: - line = "" - else: - line = line[comment_end + 2:] - - if line is "": - continue - - #line = line[:-1] - components = split(':', line, 1) - if len(components) != 2: - print "Invalid line %(linenum_compose)d in %(filename)s: No sequence\ - /value pair found" % { "linenum_compose": linenum_compose, "filename": filename_compose } - exit(-1) - (seq, val ) = split(':', line, 1) - seq = seq.strip() - val = val.strip() - raw_sequence = findall('\w+', seq) - values = split('\s+', val) - unichar_temp = split('"', values[0]) - unichar_utf8 = unichar_temp[1] - if len(values) == 1: - continue - codepointstr = values[1] - if values[1] == '#': - # No codepoints that are >1 characters yet. - continue - if raw_sequence[0][0] == 'U' and match('[0-9a-fA-F]+$', raw_sequence[0][1:]): - raw_sequence[0] = '0x' + raw_sequence[0][1:] - if match('^U[0-9a-fA-F]+$', codepointstr): - codepoint = long(codepointstr[1:], 16) - elif keysymunicodedatabase.has_key(codepointstr): - #if keysymdatabase[codepointstr] != keysymunicodedatabase[codepointstr]: - #print "DIFFERENCE: 0x%(a)X 0x%(b)X" % { "a": keysymdatabase[codepointstr], "b": keysymunicodedatabase[codepointstr]}, - #print raw_sequence, codepointstr - codepoint = keysymunicodedatabase[codepointstr] - else: - unichar = unicode(unichar_utf8, 'utf-8') - codepoint = ord(unichar) - sequence = rename_combining(raw_sequence) - reject_this = False - for i in sequence: - if keysymvalue(i) > 0xFFFF: - reject_this = True - if opt_plane1: - print sequence - break - if keysymvalue(i) < 0: - reject_this = True - break - if reject_this: - continue - if "U0342" in sequence or \ - "U0313" in sequence or \ - "U0314" in sequence or \ - "0x0313" in sequence or \ - "0x0342" in sequence or \ - "0x0314" in sequence: - continue - if codepoint > 0xFFFF: - if opt_verbose: - print "Ignore the line greater than guint16:\n%s" % line - continue - #for i in range(len(sequence)): - # if sequence[i] == "0x0342": - # sequence[i] = "dead_tilde" - if "Multi_key" not in sequence: - """ Ignore for now >0xFFFF keysyms """ - if codepoint < 0xFFFF: - original_sequence = copy(sequence) - stats_sequence = copy(sequence) - base = sequence.pop() - basechar = keysymvalue(base, filename_compose, linenum_compose) - - if basechar < 0xFFFF: - counter = 1 - unisequence = [] - not_normalised = True - skipping_this = False - for i in range(0, len(sequence)): - """ If the sequence has dead_tilde and is for Greek, we don't do algorithmically - because of lack of dead_perispomeni (i.e. conflict) - """ - bc = basechar - """if sequence[-1] == "dead_tilde" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff): - skipping_this = True - break - if sequence[-1] == "dead_horn" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff): - skipping_this = True - break - if sequence[-1] == "dead_ogonek" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff): - skipping_this = True - break - if sequence[-1] == "dead_psili": - sequence[i] = "dead_horn" - if sequence[-1] == "dead_dasia": - sequence[-1] = "dead_ogonek" - """ - unisequence.append(unichr(keysymunicodevalue(sequence.pop(), filename_compose, linenum_compose))) - - if skipping_this: - unisequence = [] - for perm in all_permutations(unisequence): - # print counter, original_sequence, unichr(basechar) + "".join(perm) - # print counter, map(unichr, perm) - normalized = normalize('NFC', unichr(basechar) + "".join(perm)) - if len(normalized) == 1: - # print 'Base: %(base)s [%(basechar)s], produces [%(unichar)s] (0x%(codepoint)04X)' \ - # % { "base": base, "basechar": unichr(basechar), "unichar": unichar, "codepoint": codepoint }, - # print "Normalized: [%(normalized)s] SUCCESS %(c)d" % { "normalized": normalized, "c": counter } - stats_sequence_data = map(keysymunicodevalue, stats_sequence) - stats_sequence_data.append(normalized) - xorg_compose_sequences_algorithmic.append(stats_sequence_data) - not_normalised = False - break; - counter += 1 - if not_normalised: - original_sequence.append(codepoint) - xorg_compose_sequences.append(original_sequence) - """ print xorg_compose_sequences[-1] """ - - else: - print "Error in base char !?!" - exit(-2) - else: - print "OVER", sequence - exit(-1) - else: - sequence.append(codepoint) - xorg_compose_sequences.append(sequence) - """ print xorg_compose_sequences[-1] """ - -def sequence_cmp(x, y): - if keysymvalue(x[0]) > keysymvalue(y[0]): - return 1 - elif keysymvalue(x[0]) < keysymvalue(y[0]): - return -1 - elif len(x) > len(y): - return 1 - elif len(x) < len(y): - return -1 - elif keysymvalue(x[1]) > keysymvalue(y[1]): - return 1 - elif keysymvalue(x[1]) < keysymvalue(y[1]): - return -1 - elif len(x) < 4: - return 0 - elif keysymvalue(x[2]) > keysymvalue(y[2]): - return 1 - elif keysymvalue(x[2]) < keysymvalue(y[2]): - return -1 - elif len(x) < 5: - return 0 - elif keysymvalue(x[3]) > keysymvalue(y[3]): - return 1 - elif keysymvalue(x[3]) < keysymvalue(y[3]): - return -1 - elif len(x) < 6: - return 0 - elif keysymvalue(x[4]) > keysymvalue(y[4]): - return 1 - elif keysymvalue(x[4]) < keysymvalue(y[4]): - return -1 - else: - return 0 - -def sequence_unicode_cmp(x, y): - if keysymunicodevalue(x[0]) > keysymunicodevalue(y[0]): - return 1 - elif keysymunicodevalue(x[0]) < keysymunicodevalue(y[0]): - return -1 - elif len(x) > len(y): - return 1 - elif len(x) < len(y): - return -1 - elif keysymunicodevalue(x[1]) > keysymunicodevalue(y[1]): - return 1 - elif keysymunicodevalue(x[1]) < keysymunicodevalue(y[1]): - return -1 - elif len(x) < 4: - return 0 - elif keysymunicodevalue(x[2]) > keysymunicodevalue(y[2]): - return 1 - elif keysymunicodevalue(x[2]) < keysymunicodevalue(y[2]): - return -1 - elif len(x) < 5: - return 0 - elif keysymunicodevalue(x[3]) > keysymunicodevalue(y[3]): - return 1 - elif keysymunicodevalue(x[3]) < keysymunicodevalue(y[3]): - return -1 - elif len(x) < 6: - return 0 - elif keysymunicodevalue(x[4]) > keysymunicodevalue(y[4]): - return 1 - elif keysymunicodevalue(x[4]) < keysymunicodevalue(y[4]): - return -1 - else: - return 0 - -def sequence_algorithmic_cmp(x, y): - if len(x) < len(y): - return -1 - elif len(x) > len(y): - return 1 - else: - for i in range(len(x)): - if x[i] < y[i]: - return -1 - elif x[i] > y[i]: - return 1 - return 0 - - -xorg_compose_sequences.sort(sequence_cmp) - -xorg_compose_sequences_uniqued = [] -first_time = True -item = None -for next_item in xorg_compose_sequences: - if first_time: - first_time = False - item = next_item - if sequence_unicode_cmp(item, next_item) != 0: - xorg_compose_sequences_uniqued.append(item) - item = next_item - -xorg_compose_sequences = copy(xorg_compose_sequences_uniqued) - -counter_multikey = 0 -for item in xorg_compose_sequences: - if findall('Multi_key', "".join(item[:-1])) != []: - counter_multikey += 1 - -xorg_compose_sequences_algorithmic.sort(sequence_algorithmic_cmp) -xorg_compose_sequences_algorithmic_uniqued = uniq(xorg_compose_sequences_algorithmic) - -firstitem = "" -num_first_keysyms = 0 -zeroes = 0 -num_entries = 0 -num_algorithmic_greek = 0 -for sequence in xorg_compose_sequences: - if keysymvalue(firstitem) != keysymvalue(sequence[0]): - firstitem = sequence[0] - num_first_keysyms += 1 - zeroes += 6 - len(sequence) + 1 - num_entries += 1 - -for sequence in xorg_compose_sequences_algorithmic_uniqued: - ch = ord(sequence[-1:][0]) - if ch >= 0x370 and ch <= 0x3ff or ch >= 0x1f00 and ch <= 0x1fff: - num_algorithmic_greek += 1 - - -if opt_algorithmic: - for sequence in xorg_compose_sequences_algorithmic_uniqued: - letter = "".join(sequence[-1:]) - print '0x%(cp)04X, %(uni)s, seq: [ <0x%(base)04X>,' % { 'cp': ord(unicode(letter)), 'uni': letter.encode('utf-8'), 'base': sequence[-2] }, - for elem in sequence[:-2]: - print "<0x%(keysym)04X>," % { 'keysym': elem }, - """ Yeah, verified... We just want to keep the output similar to -u, so we can compare/sort easily """ - print "], recomposed as", letter.encode('utf-8'), "verified" - -def num_of_keysyms(seq): - return len(seq) - 1 - -def convert_UnotationToHex(arg): - if isinstance(arg, str): - if match('^U[0-9A-F][0-9A-F][0-9A-F][0-9A-F]$', arg): - return sub('^U', '0x', arg) - return arg - -def addprefix_GDK(arg): - if match('^0x', arg): - return '%(arg)s, ' % { 'arg': arg } - elif match('^U[0-9A-F][0-9A-F][0-9A-F][0-9A-F]$', arg.upper()): - keysym = '' - for k, c in keysymunicodedatabase.items(): - if c == keysymvalue(arg): - keysym = k - break - if keysym != '': - return 'GDK_KEY_%(arg)s, ' % { 'arg': keysym } - else: - return '0x%(arg)04X, ' % { 'arg': keysymvalue(arg) } - else: - return 'GDK_KEY_%(arg)s, ' % { 'arg': arg } - -if opt_gtk: - first_keysym = "" - sequence = [] - compose_table = [] - ct_second_part = [] - ct_sequence_width = 2 - start_offset = num_first_keysyms * (WIDTHOFCOMPOSETABLE+1) - we_finished = False - counter = 0 - - sequence_iterator = iter(xorg_compose_sequences) - sequence = sequence_iterator.next() - while True: - first_keysym = sequence[0] # Set the first keysym - compose_table.append([first_keysym, 0, 0, 0, 0, 0]) - while sequence[0] == first_keysym: - compose_table[counter][num_of_keysyms(sequence)-1] += 1 - try: - sequence = sequence_iterator.next() - except StopIteration: - we_finished = True - break - if we_finished: - break - counter += 1 - - ct_index = start_offset - for line_num in range(len(compose_table)): - for i in range(WIDTHOFCOMPOSETABLE): - occurrences = compose_table[line_num][i+1] - compose_table[line_num][i+1] = ct_index - ct_index += occurrences * (i+2) - - for sequence in xorg_compose_sequences: - ct_second_part.append(map(convert_UnotationToHex, sequence)) - - print headerfile_start - for i in compose_table: - if opt_gtkexpanded: - print "0x%(ks)04X," % { "ks": keysymvalue(i[0]) }, - print '%(str)s' % { 'str': "".join(map(lambda x : str(x) + ", ", i[1:])) } - elif not match('^0x', i[0]): - print 'GDK_KEY_%(str)s' % { 'str': "".join(map(lambda x : str(x) + ", ", i)) } - else: - print '%(str)s' % { 'str': "".join(map(lambda x : str(x) + ", ", i)) } - for i in ct_second_part: - if opt_numeric: - for ks in i[1:][:-1]: - print '0x%(seq)04X, ' % { 'seq': keysymvalue(ks) }, - print '0x%(cp)04X, ' % { 'cp':i[-1] } - """ - for ks in i[:-1]: - print '0x%(seq)04X, ' % { 'seq': keysymvalue(ks) }, - print '0x%(cp)04X, ' % { 'cp':i[-1] } - """ - elif opt_gtkexpanded: - print '%(seq)s0x%(cp)04X, ' % { 'seq': "".join(map(addprefix_GDK, i[:-1])), 'cp':i[-1] } - else: - print '%(seq)s0x%(cp)04X, ' % { 'seq': "".join(map(addprefix_GDK, i[:-1][1:])), 'cp':i[-1] } - print headerfile_end - -def redecompose(codepoint): - (name, decomposition, combiningclass) = unicodedatabase[codepoint] - if decomposition[0] == '' or decomposition[0] == '0': - return [codepoint] - if match('<\w+>', decomposition[0]): - numdecomposition = map(stringtohex, decomposition[1:]) - return map(redecompose, numdecomposition) - numdecomposition = map(stringtohex, decomposition) - return map(redecompose, numdecomposition) - -def process_unicodedata_file(verbose = False): - """ Grab from wget http://www.unicode.org/Public/UNIDATA/UnicodeData.txt """ - filename_unicodedatatxt = download_file(URL_UNICODEDATATXT) - try: - unicodedatatxt = open(filename_unicodedatatxt, 'r') - except IOError, (errno, strerror): - print "I/O error(%s): %s" % (errno, strerror) - sys.exit(-1) - except: - print "Unexpected error: ", sys.exc_info()[0] - sys.exit(-1) - for line in unicodedatatxt.readlines(): - if line[0] == "" or line[0] == '#': - continue - line = line[:-1] - uniproperties = split(';', line) - codepoint = stringtohex(uniproperties[0]) - """ We don't do Plane 1 or CJK blocks. The latter require reading additional files. """ - if codepoint > 0xFFFF or (codepoint >= 0x4E00 and codepoint <= 0x9FFF) or (codepoint >= 0xF900 and codepoint <= 0xFAFF): - continue - name = uniproperties[1] - category = uniproperties[2] - combiningclass = uniproperties[3] - decomposition = uniproperties[5] - unicodedatabase[codepoint] = [name, split('\s+', decomposition), combiningclass] - - counter_combinations = 0 - counter_combinations_greek = 0 - counter_entries = 0 - counter_entries_greek = 0 - - for item in unicodedatabase.keys(): - (name, decomposition, combiningclass) = unicodedatabase[item] - if decomposition[0] == '': - continue - print name, "is empty" - elif match('<\w+>', decomposition[0]): - continue - print name, "has weird", decomposition[0] - else: - sequence = map(stringtohex, decomposition) - chrsequence = map(unichr, sequence) - normalized = normalize('NFC', "".join(chrsequence)) - - """ print name, sequence, "Combining: ", "".join(chrsequence), normalized, len(normalized), """ - decomposedsequence = [] - for subseq in map(redecompose, sequence): - for seqitem in subseq: - if isinstance(seqitem, list): - for i in seqitem: - if isinstance(i, list): - for j in i: - decomposedsequence.append(j) - else: - decomposedsequence.append(i) - else: - decomposedsequence.append(seqitem) - recomposedchar = normalize('NFC', "".join(map(unichr, decomposedsequence))) - if len(recomposedchar) == 1 and len(decomposedsequence) > 1: - counter_entries += 1 - counter_combinations += factorial(len(decomposedsequence)-1) - ch = item - if ch >= 0x370 and ch <= 0x3ff or ch >= 0x1f00 and ch <= 0x1fff: - counter_entries_greek += 1 - counter_combinations_greek += factorial(len(decomposedsequence)-1) - if verbose: - print "0x%(cp)04X, %(uni)c, seq:" % { 'cp':item, 'uni':unichr(item) }, - print "[", - for elem in decomposedsequence: - print '<0x%(hex)04X>,' % { 'hex': elem }, - print "], recomposed as", recomposedchar, - if unichr(item) == recomposedchar: - print "verified" - - if verbose == False: - print "Unicode statistics from UnicodeData.txt" - print "Number of entries that can be algorithmically produced :", counter_entries - print " of which are for Greek :", counter_entries_greek - print "Number of compose sequence combinations requiring :", counter_combinations - print " of which are for Greek :", counter_combinations_greek - print "Note: We do not include partial compositions, " - print "thus the slight discrepancy in the figures" - print - -if opt_unicodedatatxt: - process_unicodedata_file(True) - -if opt_statistics: - print - print "Total number of compose sequences (from file) :", len(xorg_compose_sequences) + len(xorg_compose_sequences_algorithmic) - print " of which can be expressed algorithmically :", len(xorg_compose_sequences_algorithmic) - print " of which cannot be expressed algorithmically :", len(xorg_compose_sequences) - print " of which have Multi_key :", counter_multikey - print - print "Algorithmic (stats for Xorg Compose file)" - print "Number of sequences off due to algo from file (len(array)) :", len(xorg_compose_sequences_algorithmic) - print "Number of sequences off due to algo (uniq(sort(array))) :", len(xorg_compose_sequences_algorithmic_uniqued) - print " of which are for Greek :", num_algorithmic_greek - print - process_unicodedata_file() - print "Not algorithmic (stats from Xorg Compose file)" - print "Number of sequences :", len(xorg_compose_sequences) - print "Flat array looks like :", len(xorg_compose_sequences), "rows of 6 integers (2 bytes per int, or 12 bytes per row)" - print "Flat array would have taken up (in bytes) :", num_entries * 2 * 6, "bytes from the GTK+ library" - print "Number of items in flat array :", len(xorg_compose_sequences) * 6 - print " of which are zeroes :", zeroes, "or ", (100 * zeroes) / (len(xorg_compose_sequences) * 6), " per cent" - print "Number of different first items :", num_first_keysyms - print "Number of max bytes (if using flat array) :", num_entries * 2 * 6 - print "Number of savings :", zeroes * 2 - num_first_keysyms * 2 * 5 - print - print "Memory needs if both algorithmic+optimised table in latest Xorg compose file" - print " :", num_entries * 2 * 6 - zeroes * 2 + num_first_keysyms * 2 * 5 - print - print "Existing (old) implementation in GTK+" - print "Number of sequences in old gtkimcontextsimple.c :", 691 - print "The existing (old) implementation in GTK+ takes up :", 691 * 2 * 12, "bytes" diff --git a/gtk/compose/gtk-compose-lookaside.txt b/gtk/compose/gtk-compose-lookaside.txt deleted file mode 100644 index 3f3b23c69c..0000000000 --- a/gtk/compose/gtk-compose-lookaside.txt +++ /dev/null @@ -1,405 +0,0 @@ -# -# This file contains the compose sequences that GTK+ used to have until GTK+ 2.12 -# but are not found anymore at the upstream Compose file at X.Org. -# When updating gtkimcontextsimpleseqs.h with compose-parse.py, -# we include this file as well. There are 15 conflicts currently -# in the compose sequences, and we currently favour the sequences from -# this file (against the upstream X.Org file). For more, see -# http://bugzilla.gnome.org/show_bug.cgi?id=557420 -# - - : "ἴ" U0390 - : "ΐ" U03B0 - : "Ḃ" U1E02 - : "ḃ" U1E03 - : "Ḋ" U1E0A - : "ḋ" U1E0B - : "Ḟ" U1E1E - : "ḟ" U1E1F - : "Ṁ" U1E40 - : "Ṡ" U1E60 -

: "Ṗ" U1E56 -

: "ṗ" U1E57 - : "ṡ" U1E61 - : "Ṫ" U1E6A - : "ṫ" U1E6B - : "ė" U0117 - : "¢" U00A2 - : "¢" U00A2 - : "£" U00A3 - : "£" U00A3 - : "£" U00A3 - : "£" U00A3 - : "£" U00A3 - <0> : "¤" U00A4 - <0> : "¤" U00A4 - : "¤" U00A4 - : "¤" U00A4 - <0> : "¤" U00A4 - : "¤" U00A4 - : "¤" U00A4 - : "¤" U00A4 - <0> : "¤" U00A4 - : "¤" U00A4 - : "¥" U00A5 - : "¥" U00A5 - : "¥" U00A5 - : "¥" U00A5 - : "¥" U00A5 - : "¥" U00A5 - <0> : "§" U00A7 - <0> : "§" U00A7 - : "§" U00A7 - : "§" U00A7 - <0> : "§" U00A7 - : "§" U00A7 - : "§" U00A7 - <0> : "§" U00A7 - : "¨" U00A8 - : "©" U00A9 - <0> : "©" U00A9 - <0> : "©" U00A9 - <0> : "©" U00A9 - : "©" U00A9 - : "©" U00A9 - <0> : "©" U00A9 - : "ª" U00AA - : "ª" U00AA - : "Ç" U00C7 - : "­" U00AD - : "®" U00AE - : "®" U00AE - : "¯" U00AF - : "¯" U00AF - : "¯" U00AF - : "¯" U00AF - : "¯" U00AF - <0> : "°" U00B0 - <0> : "°" U00B0 - <0> : "°" U00B0 - : "±" U00B1 - <2> : "²" U00B2 - <2> : "²" U00B2 - <2> : "²" U00B2 - <2> : "²" U00B2 - <2> : "²" U00B2 - <3> : "³" U00B3 - <3> : "³" U00B3 - <3> : "³" U00B3 - <3> : "³" U00B3 - <3> : "³" U00B3 - : "´" U00B4 - : "µ" U00B5 - : "µ" U00B5 - : "µ" U00B5 - : "µ" U00B5 -

: "¶" U00B6 -

: "¶" U00B6 - : "·" U00B7 - : "·" U00B7 - : "¸" U00B8 - <1> : "¹" U00B9 - <1> : "¹" U00B9 - <1> : "¹" U00B9 - <1> : "¹" U00B9 - <1> : "¹" U00B9 - : "º" U00BA - : "º" U00BA - : "À" U00C0 - : "Á" U00C1 - : "Á" U00C1 - : "Â" U00C2 - : "Â" U00C2 - : "Â" U00C2 - : "Ã" U00C3 - : "Ã" U00C3 - : "Ã" U00C3 - : "Ä" U00C4 - : "Ä" U00C4 - : "Ä" U00C4 - : "Å" U00C5 - : "Å" U00C5 - : "Å" U00C5 - : "ˇ" U02C7 - : "ˇ" U02C7 - : "È" U00C8 - : "É" U00C9 - : "É" U00C9 - : "Ê" U00CA - : "Ê" U00CA - : "Ê" U00CA - : "Ë" U00CB - : "Ë" U00CB - : "Ë" U00CB - : "Ì" U00CC - : "Í" U00CD - : "Í" U00CD - : "Î" U00CE - : "Î" U00CE - : "Î" U00CE - : "Ï" U00CF - : "Ï" U00CF - : "Ï" U00CF - : "Ñ" U00D1 - : "Ñ" U00D1 - : "Ñ" U00D1 - : "Ò" U00D2 - : "Ó" U00D3 - : "Ó" U00D3 - : "Ô" U00D4 - : "Ô" U00D4 - : "Ô" U00D4 - : "Õ" U00D5 - : "Õ" U00D5 - : "Õ" U00D5 - : "Ö" U00D6 - : "Ö" U00D6 - : "Ö" U00D6 - : "˘" U02D8 - : "˘" U02D8 - : "Ù" U00D9 - : "Ú" U00DA - : "Ú" U00DA - : "Û" U00DB - : "Û" U00DB - : "Û" U00DB - : "Ü" U00DC - : "Ü" U00DC - : "Ü" U00DC - : "Ý" U00DD - : "Ý" U00DD - : "à" U00E0 - : "á" U00E1 - : "á" U00E1 - : "â" U00E2 - : "â" U00E2 - : "â" U00E2 - : "ā" U0101 - : "ā" U0101 - : "ã" U00E3 - : "ä" U00E4 - : "ä" U00E4 - : "ä" U00E4 - : "å" U00E5 - : "å" U00E5 - : "å" U00E5 - : "ç" U00E7 - : "è" U00E8 - : "é" U00E9 - : "é" U00E9 - : "ê" U00EA - : "ê" U00EA - : "ê" U00EA - : "ë" U00EB - : "ë" U00EB - : "ë" U00EB - : "ì" U00EC - : "í" U00ED - : "í" U00ED - : "î" U00EE - : "î" U00EE - : "î" U00EE - : "ï" U00EF - : "ï" U00EF - : "ï" U00EF - : "ñ" U00F1 - : "ñ" U00F1 - : "ñ" U00F1 - : "ò" U00F2 - : "ó" U00F3 - : "ó" U00F3 - : "ô" U00F4 - : "ô" U00F4 - : "ô" U00F4 - : "ō" U014D - : "ō" U014D - : "õ" U00F5 - : "ö" U00F6 - : "ö" U00F6 - : "ö" U00F6 - : "ø" U00F8 - : "ù" U00F9 - : "ú" U00FA - : "ú" U00FA - : "û" U00FB - : "û" U00FB - : "û" U00FB - : "ü" U00FC - : "ü" U00FC - : "ü" U00FC - : "ý" U00FD - : "ý" U00FD - : "ÿ" U00FF - : "ÿ" U00FF - : "ÿ" U00FF - : "Ă" U0102 - : "Ă" U0102 - : "ă" U0103 - : "ă" U0103 - : "Ą" U0104 - : "Ą" U0104 - : "ą" U0105 - : "ą" U0105 - : "Ć" U0106 - : "ć" U0107 - : "Ċ" U010A - : "ċ" U010B - : "Č" U010C - : "Č" U010C - : "č" U010D - : "č" U010D - : "Ď" U010E - : "Ď" U010E - : "ď" U010F - : "ď" U010F - : "Đ" U0110 - : "Đ" U0110 - : "đ" U0111 - : "Ē" U0112 - : "Ē" U0112 - : "Ē" U0112 - : "ē" U0113 - : "ē" U0113 - : "ē" U0113 - : "Ė" U0116 - : "Ę" U0118 - : "ę" U0119 - : "Ě" U011A - : "Ě" U011A - : "ě" U011B - : "ě" U011B - : "Ğ" U011E - : "Ğ" U011E - : "Ğ" U011E - : "Ğ" U011E - : "Ğ" U011E - : "ğ" U011F - : "ğ" U011F - : "ğ" U011F - : "ğ" U011F - : "ğ" U011F - : "Ġ" U0120 - : "ġ" U0121 - : "Ģ" U0122 - : "ģ" U0123 - : "Ĩ" U0128 - : "ĩ" U0129 - : "Ī" U012A - : "Ī" U012A - : "Ī" U012A - : "ī" U012B - : "ī" U012B - : "ī" U012B - : "Į" U012E - : "Į" U012E - : "İ" U0130 - : "ı" U0131 - : "Ķ" U0136 - : "ķ" U0137 - : "Ĺ" U0139 - : "ĺ" U013A - : "Ļ" U013B - : "ļ" U013C - : "Ľ" U013D - : "Ľ" U013D - : "ľ" U013E - : "ľ" U013E - : "Ł" U0141 - : "ł" U0142 - : "Ń" U0143 - : "ń" U0144 - : "Ņ" U0145 - : "ņ" U0146 - : "Ň" U0147 - : "Ň" U0147 - : "ň" U0148 - : "ň" U0148 - : "Ŕ" U0154 - : "ŕ" U0155 - : "Ŗ" U0156 - : "ŗ" U0157 - : "Ř" U0158 - : "Ř" U0158 - : "ř" U0159 - : "ř" U0159 - : "Ś" U015A - : "ś" U015B - : "Ø" U00D8 - : "Ş" U015E - : "Ş" U015E - : "ş" U015F - : "ş" U015F - : "Š" U0160 - : "Š" U0160 - : "š" U0161 - : "š" U0161 - : "Ť" U0164 - : "Ť" U0164 - : "ť" U0165 - : "ť" U0165 - : "Ŧ" U0166 - : "Ŧ" U0166 - : "ŧ" U0167 - : "ŧ" U0167 - : "Ũ" U0168 - : "ũ" U0169 - : "Ū" U016A - : "Ū" U016A - : "Ū" U016A - : "ū" U016B - : "ū" U016B - : "ū" U016B - : "Ů" U016E - : "Ů" U016E - : "ů" U016F - : "ů" U016F - : "Ų" U0172 - : "Ų" U0172 - : "ų" U0173 - : "ų" U0173 - : "Ŵ" U0174 - : "ŵ" U0175 - : "Ŷ" U0176 - : "ŷ" U0177 - : "Ÿ" U0178 - : "Ÿ" U0178 - : "Ÿ" U0178 - : "Ź" U0179 - : "ź" U017A - : "Ż" U017B - : "ż" U017C - : "Ž" U017D - : "Ž" U017D - : "Ž" U017D - : "ž" U017E - : "ž" U017E - : "ž" U017E - : "΅" U0385 - : "΅" U0385 - : "΅" U0385 - : "΅" U0385 - : "Ά" U0386 - : "ṁ" U1E41 - : "Έ" U0388 - : "Ή" U0389 - : "Ί" U038A - : "Ό" U038C - : "Ύ" U038E - : "Ώ" U038F - : "ΐ" U0390 - : "ΐ" U0390 - : "į" U012F - : "į" U012F - : "Ϊ" U03AA - : "Ϋ" U03AB - : "ά" U03AC - : "έ" U03AD - : "ή" U03AE - : "ί" U03AF - : "ΰ" U03B0 - : "ΰ" U03B0 - : "ϊ" U03CA - : "ϋ" U03CB - : "ό" U03CC - : "ύ" U03CD - : "ώ" U03CE diff --git a/gtk/compose/gtkcomposedata.h b/gtk/compose/gtkcomposedata.h new file mode 100644 index 0000000000..057347a36b --- /dev/null +++ b/gtk/compose/gtkcomposedata.h @@ -0,0 +1,9 @@ +#ifndef __GTK_COMPOSE_DATA__ +#define __GTK_COMPOSE_DATA__ + +#define MAX_SEQ_LEN 5 +#define N_INDEX_SIZE 30 +#define DATA_SIZE 16521 +#define N_CHARS 1572 + +#endif diff --git a/gtk/compose/meson.build b/gtk/compose/meson.build new file mode 100644 index 0000000000..90998faf90 --- /dev/null +++ b/gtk/compose/meson.build @@ -0,0 +1,7 @@ +compose_parse = executable('compose-parse', + sources: 'compose-parse.c', + c_args: gtk_cargs + common_cflags, + include_directories: [confinc, gtkinc], + dependencies: libgtk_static_dep, + install: false, +) diff --git a/gtk/compose/sequences b/gtk/compose/sequences new file mode 100644 index 0000000000000000000000000000000000000000..1db7a6cddb6895e0db17ad77905b2e70ddd86065 GIT binary patch literal 33042 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 MxugDe{EFNE1LHr>zyJUM literal 0 HcmV?d00001 diff --git a/gtk/gen-gtk-gresources-xml.py b/gtk/gen-gtk-gresources-xml.py index ad602d53bb..8a8da4254e 100644 --- a/gtk/gen-gtk-gresources-xml.py +++ b/gtk/gen-gtk-gresources-xml.py @@ -84,6 +84,8 @@ for f in get_files('inspector', '.ui'): xml += ''' inspector/inspector.css emoji/en.data + compose/sequences + compose/chars ''' diff --git a/gtk/gtkcomposetable.c b/gtk/gtkcomposetable.c index 2a012efa29..eb1ceeeca1 100644 --- a/gtk/gtkcomposetable.c +++ b/gtk/gtkcomposetable.c @@ -28,9 +28,9 @@ #define GTK_COMPOSE_TABLE_MAGIC "GtkComposeTable" -#define GTK_COMPOSE_TABLE_VERSION (2) +#define GTK_COMPOSE_TABLE_VERSION (3) -extern const GtkComposeTableCompact gtk_compose_table_compact; +extern const GtkComposeTable builtin_compose_table; /* Maximum length of sequences we parse */ @@ -327,35 +327,26 @@ handle_substitutions (const char *start, } static void -parser_add_default_sequences (GtkComposeParser *parser) +add_sequence (gunichar *sequence, + int len, + const char *value, + gpointer data) { - const GtkComposeTableCompact *table = >k_compose_table_compact; + GtkComposeParser *parser = data; + gunichar *seq; - for (int idx = 0; idx < table->n_index_size; idx++) - { - const guint16 *seq_index = table->data + (idx * table->n_index_stride); + seq = g_new (gunichar, len + 1); + memcpy (seq, sequence, (len + 1) * sizeof (gunichar)); - for (int i = 1; i < table->max_seq_len; i++) - { - int row_stride = i + 1; - - for (int j = seq_index[i]; j < seq_index[i + 1]; j += row_stride) - { - char buf[8] = { 0, }; - gunichar *sequence; - - sequence = g_new0 (gunichar, row_stride + 2); - sequence[0] = seq_index[0]; - for (int k = 0; k < i; k++) - sequence[1 + k] = table->data[j + k]; - sequence[1 + i] = 0; + g_hash_table_replace (parser->sequences, seq, g_strdup (value)); +} - g_unichar_to_utf8 (table->data[j + i], buf); +static void +parser_add_default_sequences (GtkComposeParser *parser) +{ + const GtkComposeTable *table = &builtin_compose_table; - g_hash_table_replace (parser->sequences, sequence, g_strdup (buf)); - } - } - } + gtk_compose_table_foreach (table, add_sequence, parser); } static void @@ -547,29 +538,54 @@ next: } } -static int -parser_compute_max_compose_len (GtkComposeParser *parser) +static void +parser_compute_max_compose_len (GtkComposeParser *parser, + int *max_compose_len, + int *n_first, + int *size) { GHashTableIter iter; - int max_compose_len = 0; gunichar *sequence; char *value; + int max = 0; + int count = 0; + GHashTable *first; + + first = g_hash_table_new (NULL, NULL); g_hash_table_iter_init (&iter, parser->sequences); while (g_hash_table_iter_next (&iter, (gpointer *)&sequence, (gpointer *)&value)) { + g_hash_table_add (first, GUINT_TO_POINTER (sequence[0])); + for (int i = 0; i < MAX_COMPOSE_LEN + 1; i++) { if (sequence[i] == 0) { - if (max_compose_len < i) - max_compose_len = i; + count += i; + if (max < i) + max = i; break; } } } - return max_compose_len; + *max_compose_len = max; + *n_first = g_hash_table_size (first); + *size = count; + + g_hash_table_unref (first); +} + +static inline int +sequence_length (gpointer a) +{ + gunichar *seq = a; + int i; + + for (i = 0; seq[i]; i++) ; + + return i; } static int @@ -579,12 +595,26 @@ sequence_compare (gpointer a, { gunichar *seq_a = a; gunichar *seq_b = b; - int max_compose_len = GPOINTER_TO_INT (data); int i; - for (i = 0; i < max_compose_len; i++) + gunichar code_a, code_b; + int len_a, len_b; + + code_a = seq_a[0]; + code_b = seq_b[0]; + + if (code_a != code_b) + return code_a - code_b; + + len_a = sequence_length (a); + len_b = sequence_length (b); + + if (len_a != len_b) + return len_a - len_b; + + for (i = 1; i < len_a; i++) { - gunichar code_a = seq_a[i]; - gunichar code_b = seq_b[i]; + code_a = seq_a[i]; + code_b = seq_b[i]; if (code_a != code_b) return code_a - code_b; @@ -640,29 +670,29 @@ gtk_compose_table_serialize (GtkComposeTable *compose_table, gsize *count) { char *p, *contents; - gsize length, total_length; + gsize header_length, total_length; guint16 bytes; const char *header = GTK_COMPOSE_TABLE_MAGIC; const guint16 version = GTK_COMPOSE_TABLE_VERSION; guint16 max_seq_len = compose_table->max_seq_len; - guint16 index_stride = max_seq_len + 2; - guint16 n_seqs = compose_table->n_seqs; + guint16 n_index_size = compose_table->n_index_size; + guint16 data_size = compose_table->data_size; guint16 n_chars = compose_table->n_chars; guint32 i; g_return_val_if_fail (compose_table != NULL, NULL); g_return_val_if_fail (max_seq_len > 0, NULL); - g_return_val_if_fail (index_stride > 0, NULL); + g_return_val_if_fail (n_index_size > 0, NULL); - length = strlen (header); - total_length = length + sizeof (guint16) * (4 + index_stride * n_seqs) + n_chars; + header_length = strlen (header); + total_length = header_length + sizeof (guint16) * (5 + data_size) + n_chars; if (count) *count = total_length; p = contents = g_malloc (total_length); - memcpy (p, header, length); - p += length; + memcpy (p, header, header_length); + p += header_length; #define APPEND_GUINT16(elt) \ bytes = GUINT16_TO_BE (elt); \ @@ -671,10 +701,11 @@ gtk_compose_table_serialize (GtkComposeTable *compose_table, APPEND_GUINT16 (version); APPEND_GUINT16 (max_seq_len); - APPEND_GUINT16 (n_seqs); + APPEND_GUINT16 (n_index_size); + APPEND_GUINT16 (data_size); APPEND_GUINT16 (n_chars); - for (i = 0; i < (guint32) index_stride * n_seqs; i++) + for (i = 0; i < data_size; i++) { APPEND_GUINT16 (compose_table->data[i]); } @@ -701,13 +732,13 @@ gtk_compose_table_load_cache (const char *compose_file) guint16 bytes; guint16 version; guint16 max_seq_len; - guint16 index_stride; - guint16 n_seqs; + guint16 n_index_size; + guint16 data_size; guint16 n_chars; guint32 i; - guint16 *gtk_compose_seqs = NULL; - GtkComposeTable *retval; + guint16 *data = NULL; char *char_data = NULL; + GtkComposeTable *retval; hash = g_str_hash (compose_file); if ((path = gtk_compose_hash_get_cache_path (hash)) == NULL) @@ -755,21 +786,21 @@ gtk_compose_table_load_cache (const char *compose_file) } GET_GUINT16 (max_seq_len); - GET_GUINT16 (n_seqs); + GET_GUINT16 (n_index_size); + GET_GUINT16 (data_size); GET_GUINT16 (n_chars); - if (max_seq_len == 0 || n_seqs == 0) + if (max_seq_len == 0 || data_size == 0) { - g_warning ("cache size is not correct %d %d", max_seq_len, n_seqs); + g_warning ("cache size is not correct %d %d", max_seq_len, data_size); goto out_load_cache; } - index_stride = max_seq_len + 2; - gtk_compose_seqs = g_new0 (guint16, n_seqs * index_stride); + data = g_new0 (guint16, data_size); - for (i = 0; i < (guint32) index_stride * n_seqs; i++) + for (i = 0; i < data_size; i++) { - GET_GUINT16 (gtk_compose_seqs[i]); + GET_GUINT16 (data[i]); } if (n_chars > 0) @@ -780,9 +811,10 @@ gtk_compose_table_load_cache (const char *compose_file) } retval = g_new0 (GtkComposeTable, 1); - retval->data = gtk_compose_seqs; + retval->data = data; retval->max_seq_len = max_seq_len; - retval->n_seqs = n_seqs; + retval->n_index_size = n_index_size; + retval->data_size = data_size; retval->char_data = char_data; retval->n_chars = n_chars; retval->id = hash; @@ -795,7 +827,7 @@ gtk_compose_table_load_cache (const char *compose_file) #undef GET_GUINT16 out_load_cache: - g_free (gtk_compose_seqs); + g_free (data); g_free (char_data); g_free (contents); g_free (path); @@ -834,94 +866,147 @@ out_save_cache: static GtkComposeTable * parser_get_compose_table (GtkComposeParser *parser) { - guint length; - guint n = 0; - int i, j; - guint16 *gtk_compose_seqs = NULL; - GList *list; - GtkComposeTable *retval = NULL; - gunichar codepoint; + guint16 *data; + GtkComposeTable *table; + guint16 encoded_value; GString *char_data; - int max_compose_len = 0; + int max_compose_len; GList *sequences; - guint32 hash; + GList *list; + int i; + int size; + int n_first; + int first_pos; + int rest_pos; + int index_rowstride; + gunichar current_first; parser_remove_duplicates (parser); if (g_hash_table_size (parser->sequences) == 0) return NULL; - hash = g_str_hash (parser->compose_file); - - max_compose_len = parser_compute_max_compose_len (parser); + parser_compute_max_compose_len (parser, &max_compose_len, &n_first, &size); sequences = g_hash_table_get_keys (parser->sequences); sequences = g_list_sort_with_data (sequences, (GCompareDataFunc) sequence_compare, - GINT_TO_POINTER (max_compose_len)); - - length = g_list_length (sequences); + NULL); - gtk_compose_seqs = g_new0 (guint16, length * (max_compose_len + 2)); + index_rowstride = max_compose_len + 1; + data = g_new0 (guint16, n_first * index_rowstride + size); char_data = g_string_new (""); + current_first = 0; + first_pos = 0; + rest_pos = n_first * index_rowstride; + for (list = sequences; list != NULL; list = list->next) { gunichar *sequence = list->data; char *value = g_hash_table_lookup (parser->sequences, sequence); + int len = sequence_length (sequence); - for (i = 0; i < max_compose_len; i++) + g_assert (2 <= len && len <= max_compose_len); + + /* Encode the value. If the value is a single + * character with a value smaller than 1 << 15, + * we just use it directly. + * Otherwise, we store the value as string and + * put the offset into the table, with the high + * bit set. + */ + if (g_utf8_strlen (value, -1) == 1 && + g_utf8_get_char (value) < 0x8000) { - if (sequence[i] == 0) - { - for (j = i; j < max_compose_len; j++) - gtk_compose_seqs[n++] = 0; - break; - } - gtk_compose_seqs[n++] = (guint16) sequence[i]; + encoded_value = (guint16) g_utf8_get_char (value); } - - if (g_utf8_strlen (value, -1) > 1) + else { + g_assert (strlen (value) < 20); + if (char_data->len > 0) g_string_append_c (char_data, 0); - codepoint = char_data->len | (1 << 31); + g_assert (char_data->len < 0x8000); + encoded_value = (guint16) (char_data->len | 0x8000); g_string_append (char_data, value); } - else + + if (sequence[0] != current_first) { - codepoint = g_utf8_get_char (value); - g_assert ((codepoint & (1 << 31)) == 0); + g_assert (sequence[0] <= 0xffff); + if (current_first != 0) + first_pos += index_rowstride; + current_first = (guint16)sequence[0]; + + data[first_pos] = (guint16)sequence[0]; + for (i = 1; i < index_rowstride; i++) + data[first_pos + i] = rest_pos; } - gtk_compose_seqs[n++] = (codepoint & 0xffff0000) >> 16; - gtk_compose_seqs[n++] = codepoint & 0xffff; + for (i = 1; i < len; i++) + { + g_assert (sequence[i] != 0); + g_assert (sequence[i] <= 0xffff); + data[rest_pos + i - 1] = (guint16) sequence[i]; + } + + g_assert (encoded_value != 0); + data[rest_pos + len - 1] = encoded_value; + + rest_pos += len; + + for (i = len; i <= max_compose_len; i++) + data[first_pos + i] = rest_pos; + + for (i = 1; i < max_compose_len; i++) + g_assert (data[first_pos + i] <= data[first_pos + i + 1]); } - retval = g_new0 (GtkComposeTable, 1); - retval->data = gtk_compose_seqs; - retval->max_seq_len = max_compose_len; - retval->n_seqs = length; - retval->id = hash; - retval->n_chars = char_data->len; - retval->char_data = g_string_free (char_data, FALSE); + g_assert (first_pos + index_rowstride == n_first * index_rowstride); + g_assert (rest_pos == n_first * index_rowstride + size); + + if (char_data->len > 0) + g_string_append_c (char_data, 0); + + table = g_new0 (GtkComposeTable, 1); + table->data = data; + table->data_size = n_first * index_rowstride + size; + table->max_seq_len = max_compose_len; + table->n_index_size = n_first; + table->n_chars = char_data->len; + table->char_data = g_string_free (char_data, FALSE); + table->id = g_str_hash (parser->compose_file); g_list_free (sequences); - return retval; + return table; } static char * -canonicalize_filename (const char *path) +canonicalize_filename (GtkComposeParser *parser, + const char *path) { GFile *file; char *retval; - file = g_file_new_for_path (path); + if (path[0] != '/' && parser->compose_file) + { + GFile *orig = g_file_new_for_path (parser->compose_file); + GFile *parent = g_file_get_parent (orig); + file = g_file_resolve_relative_path (parent, path); + g_object_unref (parent); + g_object_unref (orig); + } + else + { + file = g_file_new_for_path (path); + } + retval = g_file_get_path (file); g_object_unref (file); @@ -939,7 +1024,7 @@ parser_parse_file (GtkComposeParser *parser, if (parser->compose_file == NULL) parser->compose_file = compose_file; - path = canonicalize_filename (compose_file); + path = canonicalize_filename (parser, compose_file); if (g_list_find_custom (parser->files, path, (GCompareFunc)strcmp)) { @@ -956,24 +1041,31 @@ parser_parse_file (GtkComposeParser *parser, } GtkComposeTable * -gtk_compose_table_new_with_file (const char *compose_file) +gtk_compose_table_parse (const char *compose_file) { GtkComposeParser *parser; GtkComposeTable *compose_table; + parser = parser_new (); + parser_parse_file (parser, compose_file); + compose_table = parser_get_compose_table (parser); + parser_free (parser); + + return compose_table; +} + +GtkComposeTable * +gtk_compose_table_new_with_file (const char *compose_file) +{ + GtkComposeTable *compose_table; + g_assert (compose_file != NULL); compose_table = gtk_compose_table_load_cache (compose_file); if (compose_table != NULL) return compose_table; - parser = parser_new (); - - parser_parse_file (parser, compose_file); - - compose_table = parser_get_compose_table (parser); - - parser_free (parser); + compose_table = gtk_compose_table_parse (compose_file); if (compose_table != NULL) gtk_compose_table_save_cache (compose_table); @@ -986,34 +1078,30 @@ gtk_compose_table_new_with_data (const guint16 *data, int max_seq_len, int n_seqs) { + GtkComposeParser *parser; GtkComposeTable *compose_table; - gsize n_index_stride; - gsize length; int i; - guint16 *gtk_compose_seqs = NULL; - g_return_val_if_fail (data != NULL, NULL); - g_return_val_if_fail (max_seq_len >= 0, NULL); - g_return_val_if_fail (n_seqs >= 0, NULL); + parser = parser_new (); - n_index_stride = max_seq_len + 2; - if (!g_size_checked_mul (&length, n_index_stride, n_seqs)) + for (i = 0; i < n_seqs; i++) { - g_critical ("Overflow in the compose sequences"); - return NULL; - } + const guint16 *seq = data + i * (max_seq_len + 2); + guint16 *sequence; + gunichar ch; + char buf[8] = { 0, }; + + sequence = g_new0 (guint16, max_seq_len + 1); + memcpy (sequence, seq, sizeof (guint16) * max_seq_len); + + ch = ((gunichar)seq[max_seq_len]) << 16 | (gunichar)seq[max_seq_len + 1]; + g_unichar_to_utf8 (ch, buf); - gtk_compose_seqs = g_new0 (guint16, length); - for (i = 0; i < length; i++) - gtk_compose_seqs[i] = data[i]; + g_hash_table_replace (parser->sequences, sequence, g_strdup (buf)); + } - compose_table = g_new (GtkComposeTable, 1); - compose_table->data = gtk_compose_seqs; - compose_table->max_seq_len = max_seq_len; - compose_table->n_seqs = n_seqs; - compose_table->id = data_hash (data, length); - compose_table->char_data = NULL; - compose_table->n_chars = 0; + compose_table = parser_get_compose_table (parser); + parser_free (parser); return compose_table; } @@ -1038,6 +1126,20 @@ compare_seq (const void *key, const void *value) return 0; } +static int +compare_seq_index (const void *key, const void *value) +{ + const guint16 *keysyms = key; + const guint16 *seq = value; + + if (keysyms[0] < seq[0]) + return -1; + else if (keysyms[0] > seq[0]) + return 1; + + return 0; +} + /* * gtk_compose_table_check: * @table: the table to check @@ -1058,97 +1160,6 @@ gtk_compose_table_check (const GtkComposeTable *table, gboolean *compose_finish, gboolean *compose_match, GString *output) -{ - int row_stride = table->max_seq_len + 2; - guint16 *seq; - - *compose_finish = FALSE; - *compose_match = FALSE; - - g_string_set_size (output, 0); - - /* Will never match, if the sequence in the compose buffer is longer - * than the sequences in the table. Further, compare_seq (key, val) - * will overrun val if key is longer than val. - */ - if (n_compose > table->max_seq_len) - return FALSE; - - seq = bsearch (compose_buffer, - table->data, table->n_seqs, - sizeof (guint16) * row_stride, - compare_seq); - - if (seq) - { - guint16 *prev_seq; - - /* Back up to the first sequence that matches to make sure - * we find the exact match if there is one. - */ - while (seq > table->data) - { - prev_seq = seq - row_stride; - if (compare_seq (compose_buffer, prev_seq) != 0) - break; - seq = prev_seq; - } - - if (n_compose == table->max_seq_len || - seq[n_compose] == 0) /* complete sequence */ - { - guint16 *next_seq; - gunichar value; - - value = (seq[table->max_seq_len] << 16) | seq[table->max_seq_len + 1]; - if ((value & (1 << 31)) != 0) - g_string_append (output, &table->char_data[value & ~(1 << 31)]); - else - g_string_append_unichar (output, value); - - *compose_match = TRUE; - - /* We found a tentative match. See if there are any longer - * sequences containing this subsequence - */ - next_seq = seq + row_stride; - if (next_seq < table->data + row_stride * table->n_seqs) - { - if (compare_seq (compose_buffer, next_seq) == 0) - return TRUE; - } - - *compose_finish = TRUE; - return TRUE; - } - - return TRUE; - } - - return FALSE; -} - -static int -compare_seq_index (const void *key, const void *value) -{ - const guint16 *keysyms = key; - const guint16 *seq = value; - - if (keysyms[0] < seq[0]) - return -1; - else if (keysyms[0] > seq[0]) - return 1; - - return 0; -} - -gboolean -gtk_compose_table_compact_check (const GtkComposeTableCompact *table, - const guint16 *compose_buffer, - int n_compose, - gboolean *compose_finish, - gboolean *compose_match, - gunichar *output_char) { int row_stride; guint16 *seq_index; @@ -1161,8 +1172,6 @@ gtk_compose_table_compact_check (const GtkComposeTableCompact *table, *compose_finish = FALSE; if (compose_match) *compose_match = FALSE; - if (output_char) - *output_char = 0; /* Will never match, if the sequence in the compose buffer is longer * than the sequences in the table. Further, compare_seq (key, val) @@ -1174,7 +1183,7 @@ gtk_compose_table_compact_check (const GtkComposeTableCompact *table, seq_index = bsearch (compose_buffer, table->data, table->n_index_size, - sizeof (guint16) * table->n_index_stride, + sizeof (guint16) * (table->max_seq_len + 1), compare_seq_index); if (!seq_index) @@ -1196,7 +1205,7 @@ gtk_compose_table_compact_check (const GtkComposeTableCompact *table, seq = bsearch (compose_buffer + 1, table->data + seq_index[i], (seq_index[i + 1] - seq_index[i]) / row_stride, - sizeof (guint16) * row_stride, + sizeof (guint16) * row_stride, compare_seq); if (seq) @@ -1204,12 +1213,15 @@ gtk_compose_table_compact_check (const GtkComposeTableCompact *table, if (i == n_compose - 1) { value = seq[row_stride - 1]; + + if ((value & (1 << 15)) != 0) + g_string_append (output, &table->char_data[value & ~(1 << 15)]); + else + g_string_append_unichar (output, value); match = TRUE; } else { - if (output_char) - *output_char = value; if (match) { if (compose_match) @@ -1228,8 +1240,6 @@ gtk_compose_table_compact_check (const GtkComposeTableCompact *table, *compose_match = TRUE; if (compose_finish) *compose_finish = TRUE; - if (output_char) - *output_char = value; return TRUE; } @@ -1237,6 +1247,65 @@ gtk_compose_table_compact_check (const GtkComposeTableCompact *table, return FALSE; } +void +gtk_compose_table_foreach (const GtkComposeTable *table, + GtkComposeSequenceCallback callback, + gpointer data) +{ + int index_stride = table->max_seq_len + 1; + gunichar *sequence; + int seqno; + + sequence = g_new0 (gunichar, table->max_seq_len + 1); + + seqno = 0; + for (int idx = 0; idx < table->n_index_size; idx++) + { + const guint16 *seq_index = table->data + (idx * index_stride); + + for (int i = 1; i < table->max_seq_len; i++) + { + int len = i + 1; + + g_assert (seq_index[i] <= seq_index[i + 1]); + g_assert (seq_index[i + 1] <= table->data_size); + g_assert ((seq_index[i + 1] - seq_index[i]) % len == 0); + + for (int j = seq_index[i]; j < seq_index[i + 1]; j += len) + { + char buf[8] = { 0, }; + guint16 encoded_value; + char *value; + + sequence[0] = seq_index[0]; + for (int k = 0; k < len - 1; k++) + sequence[k + 1] = (gunichar) table->data[j + k]; + sequence[len] = 0; + + encoded_value = table->data[j + len - 1]; + g_assert (encoded_value != 0); + if ((encoded_value & (1 << 15)) != 0) + { + int char_offset = encoded_value & ~(1 << 15); + g_assert (char_offset < table->n_chars); + value = &table->char_data[char_offset]; + g_assert (strlen (value) < 20); + } + else + { + g_unichar_to_utf8 ((gunichar)encoded_value, buf); + value = buf; + } + + callback (sequence, len, value, data); + seqno++; + } + } + } + + g_free (sequence); +} + /* Checks if a keysym is a dead key. * Dead key keysym values are defined in ../gdk/gdkkeysyms.h and the * first is GDK_KEY_dead_grave. As X.Org is updated, more dead keys @@ -1428,4 +1497,3 @@ gtk_check_algorithmically (const guint16 *compose_buffer, return FALSE; } - diff --git a/gtk/gtkcomposetable.h b/gtk/gtkcomposetable.h index 1f28f83e73..0e6c1aec9c 100644 --- a/gtk/gtkcomposetable.h +++ b/gtk/gtkcomposetable.h @@ -26,50 +26,65 @@ G_BEGIN_DECLS typedef struct _GtkComposeTable GtkComposeTable; typedef struct _GtkComposeTableCompact GtkComposeTableCompact; +/* The layout of the data is as follows: + * + * The first part of the data contains rows of length max_seq_len + 1, + * where the first element is the item of the sequence, and the + * following elements are offsets to the data for sequences that + * start with the first item of length 2, ..., max_seq_len. + * + * The second part of the data contains the rest of the sequence + * data. It does not have a fixed stride. For each sequence, we + * put seq[2], ..., seq[len - 1], followed by the encoded value + * for this sequence. + * + * The values are encoded as follows: + * + * If the value is a single Unicode character smaler than 0x8000, + * then we place it directly. Otherwise, we put the UTF8-encoded + * value in the char_data array, and use offset | 0x8000 as the + * encoded value. + */ struct _GtkComposeTable { guint16 *data; char *char_data; int max_seq_len; - int n_seqs; + int n_index_size; + int data_size; int n_chars; guint32 id; }; -struct _GtkComposeTableCompact -{ - const guint16 *data; - int max_seq_len; - int n_index_size; - int n_index_stride; -}; +GtkComposeTable * gtk_compose_table_new_with_file (const char *compose_file); +GtkComposeTable * gtk_compose_table_parse (const char *compose_file); +GtkComposeTable * gtk_compose_table_new_with_data (const guint16 *data, + int max_seq_len, + int n_seqs); -GtkComposeTable * gtk_compose_table_new_with_file (const char *compose_file); -GtkComposeTable * gtk_compose_table_new_with_data (const guint16 *data, - int max_seq_len, - int n_seqs); +typedef void (* GtkComposeSequenceCallback) (gunichar *sequence, + int len, + const char *value, + gpointer data); -gboolean gtk_compose_table_check (const GtkComposeTable *table, - const guint16 *compose_buffer, - int n_compose, - gboolean *compose_finish, - gboolean *compose_match, - GString *output); +void gtk_compose_table_foreach (const GtkComposeTable *table, + GtkComposeSequenceCallback callback, + gpointer data); -gboolean gtk_compose_table_compact_check (const GtkComposeTableCompact *table, - const guint16 *compose_buffer, - int n_compose, - gboolean *compose_finish, - gboolean *compose_match, - gunichar *output_char); +gboolean gtk_compose_table_check (const GtkComposeTable *table, + const guint16 *compose_buffer, + int n_compose, + gboolean *compose_finish, + gboolean *compose_match, + GString *output); -gboolean gtk_check_algorithmically (const guint16 *compose_buffer, - int n_compose, - gunichar *output); +gboolean gtk_check_algorithmically (const guint16 *compose_buffer, + int n_compose, + gunichar *output); -guint32 gtk_compose_table_data_hash (const guint16 *data, - int max_seq_len, - int n_seqs); +guint32 gtk_compose_table_data_hash (const guint16 *data, + int max_seq_len, + int n_seqs); G_END_DECLS diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c index 078ed6f612..5ad9f8c8ab 100644 --- a/gtk/gtkimcontextsimple.c +++ b/gtk/gtkimcontextsimple.c @@ -74,18 +74,32 @@ struct _GtkIMContextSimplePrivate guint modifiers_dropped : 1; }; -/* From the values below, the value 30 means the number of different first keysyms - * that exist in the Compose file (from Xorg). When running compose-parse.py without - * parameters, you get the count that you can put here. Needed when updating the - * gtkimcontextsimpleseqs.h header file (contains the compose sequences). - */ -const GtkComposeTableCompact gtk_compose_table_compact = { - gtk_compose_seqs_compact, - 5, - 30, - 6 +#include "gtk/compose/gtkcomposedata.h" + +GtkComposeTable builtin_compose_table = { + NULL, + NULL, + MAX_SEQ_LEN, + N_INDEX_SIZE, + DATA_SIZE, + N_CHARS, + 0 }; +static void +init_builtin_table (void) +{ + GBytes *bytes; + + bytes = g_resources_lookup_data ("/org/gtk/libgtk/compose/sequences", 0, NULL); + builtin_compose_table.data = (guint16 *) g_bytes_get_data (bytes, NULL); + g_bytes_unref (bytes); + + bytes = g_resources_lookup_data ("/org/gtk/libgtk/compose/chars", 0, NULL); + builtin_compose_table.char_data = (char *) g_bytes_get_data (bytes, NULL); + g_bytes_unref (bytes); +} + G_LOCK_DEFINE_STATIC (global_tables); static GSList *global_tables; static gboolean omit_builtin_sequences; @@ -147,6 +161,7 @@ gtk_im_context_simple_class_init (GtkIMContextSimpleClass *class) im_context_class->get_preedit_string = gtk_im_context_simple_get_preedit_string; gobject_class->finalize = gtk_im_context_simple_finalize; + init_builtin_table (); init_compose_table_async (NULL, NULL, NULL); } @@ -200,9 +215,9 @@ add_compose_table_from_file (const char *compose_file, } static void -add_compose_table_from_data (const guint16 *data, - int max_seq_len, - int n_seqs) +add_compose_table_from_data (guint16 *data, + int max_seq_len, + int n_seqs) { guint hash; @@ -337,7 +352,7 @@ gtk_im_context_simple_init (GtkIMContextSimple *context_simple) priv = context_simple->priv = gtk_im_context_simple_get_instance_private (context_simple); - priv->compose_buffer_len = gtk_compose_table_compact.max_seq_len + 1; + priv->compose_buffer_len = builtin_compose_table.max_seq_len + 1; priv->compose_buffer = g_new0 (guint16, priv->compose_buffer_len); priv->tentative_match = g_string_new (""); priv->tentative_match_len = 0; @@ -1069,18 +1084,19 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, G_UNLOCK (global_tables); - g_string_free (output, TRUE); - if (success) - return TRUE; + { + g_string_free (output, TRUE); + return TRUE; + } G_LOCK (global_tables); if (!omit_builtin_sequences && - gtk_compose_table_compact_check (>k_compose_table_compact, - priv->compose_buffer, n_compose, - &compose_finish, &compose_match, - &output_char)) + gtk_compose_table_check (&builtin_compose_table, + priv->compose_buffer, n_compose, + &compose_finish, &compose_match, + output)) { if (!priv->in_compose_sequence) { @@ -1091,24 +1107,28 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, if (compose_finish) { if (compose_match) - gtk_im_context_simple_commit_char (context_simple, output_char); + gtk_im_context_simple_commit_string (context_simple, output->str); } else { if (compose_match) { - g_string_set_size (priv->tentative_match, 0); - g_string_append_unichar (priv->tentative_match, output_char); + g_string_assign (priv->tentative_match, output->str); priv->tentative_match_len = n_compose; } g_signal_emit_by_name (context_simple, "preedit-changed"); } - return TRUE; + success = TRUE; } G_UNLOCK (global_tables); + g_string_free (output, TRUE); + + if (success) + return TRUE; + if (gtk_check_algorithmically (priv->compose_buffer, n_compose, &output_char)) { if (!priv->in_compose_sequence) @@ -1261,12 +1281,14 @@ gtk_im_context_simple_get_preedit_string (GtkIMContext *context, * The table must be sorted in dictionary order on the * numeric value of the key symbol fields. (Values beyond * the length of the sequence should be zero.) - **/ + * + * Deprecated: 4.4: Use gtk_im_context_simple_add_compose_file() + */ void gtk_im_context_simple_add_table (GtkIMContextSimple *context_simple, - guint16 *data, - int max_seq_len, - int n_seqs) + guint16 *data, + int max_seq_len, + int n_seqs) { g_return_if_fail (GTK_IS_IM_CONTEXT_SIMPLE (context_simple)); diff --git a/gtk/gtkimcontextsimple.h b/gtk/gtkimcontextsimple.h index 7bd4454b1c..c2629a8fdd 100644 --- a/gtk/gtkimcontextsimple.h +++ b/gtk/gtkimcontextsimple.h @@ -63,11 +63,11 @@ GType gtk_im_context_simple_get_type (void) G_GNUC_CONST; GDK_AVAILABLE_IN_ALL GtkIMContext *gtk_im_context_simple_new (void); -GDK_AVAILABLE_IN_ALL +GDK_DEPRECATED_IN_4_4_FOR(gtk_im_context_simple_add_compose_file) void gtk_im_context_simple_add_table (GtkIMContextSimple *context_simple, - guint16 *data, - int max_seq_len, - int n_seqs); + guint16 *data, + int max_seq_len, + int n_seqs); GDK_AVAILABLE_IN_ALL void gtk_im_context_simple_add_compose_file (GtkIMContextSimple *context_simple, const char *compose_file); diff --git a/gtk/meson.build b/gtk/meson.build index 9e2e04d798..4a16e2808f 100644 --- a/gtk/meson.build +++ b/gtk/meson.build @@ -1276,3 +1276,5 @@ libgtk_static_dep = declare_dependency(sources: gtk_dep_sources, link_with: [libgtk_static, libgtk_css, libgdk, libgsk ], link_args: common_ldflags, ) + +subdir('compose') diff --git a/testsuite/gtk/compose/basic.expected b/testsuite/gtk/compose/basic.expected index ab7a0d2b94..96e2f4e0e3 100644 --- a/testsuite/gtk/compose/basic.expected +++ b/testsuite/gtk/compose/basic.expected @@ -1,3 +1,5 @@ -# n_seqs: 1 # max_seq_len: 4 +# n_index_size: 1 +# data_size: 9 +# n_chars: 0 : "!" # U21 diff --git a/testsuite/gtk/compose/codepoint.expected b/testsuite/gtk/compose/codepoint.expected index d2c09f6c3f..295e71882f 100644 --- a/testsuite/gtk/compose/codepoint.expected +++ b/testsuite/gtk/compose/codepoint.expected @@ -1,3 +1,5 @@ -# n_seqs: 1 # max_seq_len: 4 +# n_index_size: 1 +# data_size: 9 +# n_chars: 0 : "!" # U21 diff --git a/testsuite/gtk/compose/comments.expected b/testsuite/gtk/compose/comments.expected index 728817b5db..683486e499 100644 --- a/testsuite/gtk/compose/comments.expected +++ b/testsuite/gtk/compose/comments.expected @@ -1,5 +1,7 @@ -# n_seqs: 3 # max_seq_len: 2 +# n_index_size: 1 +# data_size: 9 +# n_chars: 0 : "a" # U61 : "#" # U23 : "a" # U61 diff --git a/testsuite/gtk/compose/cycle b/testsuite/gtk/compose/cycle index b65eca834f..2f9a0c6a15 100644 --- a/testsuite/gtk/compose/cycle +++ b/testsuite/gtk/compose/cycle @@ -1,3 +1,3 @@ -include "testsuite/gtk/compose/cycle" # create an include cycle +include "cycle" # create an include cycle : "!" diff --git a/testsuite/gtk/compose/hex.expected b/testsuite/gtk/compose/hex.expected index 603344216c..f753c59688 100644 --- a/testsuite/gtk/compose/hex.expected +++ b/testsuite/gtk/compose/hex.expected @@ -1,3 +1,5 @@ -# n_seqs: 1 # max_seq_len: 4 +# n_index_size: 1 +# data_size: 9 +# n_chars: 7 : "⏾⏳" diff --git a/testsuite/gtk/compose/include b/testsuite/gtk/compose/include index f69d7a79e7..d6c3ee7bb6 100644 --- a/testsuite/gtk/compose/include +++ b/testsuite/gtk/compose/include @@ -1,4 +1,4 @@ -include "testsuite/gtk/compose/included" # see if this works +include "included" # see if this works : "!" # replace this entry : "" # remove this entry diff --git a/testsuite/gtk/compose/include.expected b/testsuite/gtk/compose/include.expected index b2145d544b..bb0bd50a9c 100644 --- a/testsuite/gtk/compose/include.expected +++ b/testsuite/gtk/compose/include.expected @@ -1,3 +1,5 @@ -# n_seqs: 1 # max_seq_len: 4 +# n_index_size: 1 +# data_size: 9 +# n_chars: 0 : "!" # U21 diff --git a/testsuite/gtk/compose/long.expected b/testsuite/gtk/compose/long.expected index 17de9b5575..e50a95d39a 100644 --- a/testsuite/gtk/compose/long.expected +++ b/testsuite/gtk/compose/long.expected @@ -1,3 +1,5 @@ -# n_seqs: 1 # max_seq_len: 11 +# n_index_size: 1 +# data_size: 23 +# n_chars: 5 : "🧀" # U1f9c0 diff --git a/testsuite/gtk/compose/match.expected b/testsuite/gtk/compose/match.expected index c9013cac3c..6a2deaa724 100644 --- a/testsuite/gtk/compose/match.expected +++ b/testsuite/gtk/compose/match.expected @@ -1,5 +1,7 @@ -# n_seqs: 3 # max_seq_len: 7 - : "!" # U21 - : "?" # U3f - : "🥂" # U1f942 +# n_index_size: 1 +# data_size: 24 +# n_chars: 4 + : "!" # U21 + : "?" # U3f + : "🥂" diff --git a/testsuite/gtk/compose/multi.expected b/testsuite/gtk/compose/multi.expected index 21b97a0fe5..72a9fbe92d 100644 --- a/testsuite/gtk/compose/multi.expected +++ b/testsuite/gtk/compose/multi.expected @@ -1,5 +1,7 @@ -# n_seqs: 3 # max_seq_len: 5 - : "_" # U5f - : "!" # U21 +# n_index_size: 1 +# data_size: 19 +# n_chars: 0 + : "_" # U5f + : "!" # U21 : "/" # U2f diff --git a/testsuite/gtk/compose/octal.expected b/testsuite/gtk/compose/octal.expected index ab7a0d2b94..96e2f4e0e3 100644 --- a/testsuite/gtk/compose/octal.expected +++ b/testsuite/gtk/compose/octal.expected @@ -1,3 +1,5 @@ -# n_seqs: 1 # max_seq_len: 4 +# n_index_size: 1 +# data_size: 9 +# n_chars: 0 : "!" # U21 diff --git a/testsuite/gtk/compose/strings.expected b/testsuite/gtk/compose/strings.expected index e1dfdc6dc1..4eff96267a 100644 --- a/testsuite/gtk/compose/strings.expected +++ b/testsuite/gtk/compose/strings.expected @@ -1,6 +1,8 @@ -# n_seqs: 4 # max_seq_len: 5 - : "\"\\" - : "!a" +# n_index_size: 1 +# data_size: 24 +# n_chars: 9 + : "\"\\" + : "!a" : "?" # U3f : "QR" diff --git a/testsuite/gtk/compose/system.expected b/testsuite/gtk/compose/system.expected index 92a4710596..04902d2c76 100644 --- a/testsuite/gtk/compose/system.expected +++ b/testsuite/gtk/compose/system.expected @@ -1,472 +1,899 @@ -# n_seqs: 4476 # max_seq_len: 5 - : "ΐ" # U390 - : "ΰ" # U3b0 - : "`" # U60 - : "Ǜ" # U1db - : "ǜ" # U1dc - : "̀" # U300 - : "`" # U60 - : "Ǜ" # U1db - : "ǜ" # U1dc - : "ῒ" # U1fd2 - : "ῢ" # U1fe2 - : "Ἃ" # U1f0b - : "Ἓ" # U1f1b - : "Ἣ" # U1f2b - : "Ἳ" # U1f3b - : "Ὃ" # U1f4b - : "Ὓ" # U1f5b - : "Ὣ" # U1f6b - : "ἃ" # U1f03 - : "ἓ" # U1f13 - : "ἣ" # U1f23 - : "ἳ" # U1f33 - : "ὃ" # U1f43 - : "ὓ" # U1f53 - : "ὣ" # U1f63 - : "Ἂ" # U1f0a - : "Ἒ" # U1f1a - : "Ἢ" # U1f2a - : "Ἲ" # U1f3a - : "Ὂ" # U1f4a - : "Ὢ" # U1f6a - : "ἂ" # U1f02 - : "ἒ" # U1f12 - : "ἢ" # U1f22 - : "ἲ" # U1f32 - : "ὂ" # U1f42 - : "ὒ" # U1f52 - : "ὢ" # U1f62 - : "Ờ" # U1edc - : "Ừ" # U1eea - : "ờ" # U1edd - : "ừ" # U1eeb - : "Ằ" # U1eb0 - : "ằ" # U1eb1 - : "Ầ" # U1ea6 - : "Ề" # U1ec0 - : "Ồ" # U1ed2 - : "ầ" # U1ea7 - : "ề" # U1ec1 - : "ồ" # U1ed3 - : "Ḕ" # U1e14 - : "Ṑ" # U1e50 - : "ḕ" # U1e15 - : "ṑ" # U1e51 - : "Ằ" # U1eb0 - : "ằ" # U1eb1 - : "Ḕ" # U1e14 - : "Ṑ" # U1e50 - : "ḕ" # U1e15 - : "ṑ" # U1e51 - : "'" # U27 - : "Ǘ" # U1d7 - : "ǘ" # U1d8 - : "́" # U301 - : "´" # Ub4 - : "΅" # U385 - : "Ǿ" # U1fe - : "ǿ" # U1ff - : "Ḯ" # U1e2e - : "Ǘ" # U1d7 - : "ḯ" # U1e2f - : "ǘ" # U1d8 - : "ΐ" # U390 - : "ΰ" # U3b0 - : "Ἅ" # U1f0d - : "Ἕ" # U1f1d - : "Ἥ" # U1f2d - : "Ἵ" # U1f3d - : "Ὅ" # U1f4d - : "Ὕ" # U1f5d - : "Ὥ" # U1f6d - : "ἅ" # U1f05 - : "ἕ" # U1f15 - : "ἥ" # U1f25 - : "ἵ" # U1f35 - : "ὅ" # U1f45 - : "ὕ" # U1f55 - : "ὥ" # U1f65 - : "Ἄ" # U1f0c - : "Ἔ" # U1f1c - : "Ἤ" # U1f2c - : "Ἴ" # U1f3c - : "Ὄ" # U1f4c - : "Ὤ" # U1f6c - : "ἄ" # U1f04 - : "ἔ" # U1f14 - : "ἤ" # U1f24 - : "ἴ" # U1f34 - : "ὄ" # U1f44 - : "ὔ" # U1f54 - : "ὤ" # U1f64 - : "Ớ" # U1eda - : "Ứ" # U1ee8 - : "ớ" # U1edb - : "ứ" # U1ee9 - : "Ḉ" # U1e08 - : "ḉ" # U1e09 - : "Ǿ" # U1fe - : "ǿ" # U1ff - : "Ắ" # U1eae - : "ắ" # U1eaf - : "Ấ" # U1ea4 - : "Ế" # U1ebe - : "Ố" # U1ed0 - : "ấ" # U1ea5 - : "ế" # U1ebf - : "ố" # U1ed1 - : "Ḗ" # U1e16 - : "Ṓ" # U1e52 - : "ḗ" # U1e17 - : "ṓ" # U1e53 - : "Ắ" # U1eae - : "ắ" # U1eaf - : "Ǻ" # U1fa - : "ǻ" # U1fb - : "Ṍ" # U1e4c - : "Ṹ" # U1e78 - : "ṍ" # U1e4d - : "ṹ" # U1e79 - : "Ḗ" # U1e16 - : "Ṓ" # U1e52 - : "ḗ" # U1e17 - : "ṓ" # U1e53 - : "Ḉ" # U1e08 - : "ḉ" # U1e09 - : "Ǿ" # U1fe - : "ǿ" # U1ff - : "^" # U5e - : "⁽" # U207d - : "⁾" # U207e - : "⁺" # U207a - : "⁻" # U207b - : "⁰" # U2070 - : "¹" # Ub9 - : "²" # Ub2 - : "³" # Ub3 - : "⁴" # U2074 - : "⁵" # U2075 - : "⁶" # U2076 - : "⁷" # U2077 - : "⁸" # U2078 - : "⁹" # U2079 - : "⁼" # U207c - : "̂" # U302 - : "Ầ" # U1ea6 - : "Ấ" # U1ea4 - : "Ẫ" # U1eaa - : "Ề" # U1ec0 - : "Ế" # U1ebe - : "Ồ" # U1ed2 - : "Ố" # U1ed0 - : "Ỗ" # U1ed6 - : "ầ" # U1ea7 - : "ấ" # U1ea5 - : "ẫ" # U1eab - : "ề" # U1ec1 - : "ế" # U1ebf - : "ồ" # U1ed3 - : "ố" # U1ed1 - : "ỗ" # U1ed7 - : "⁻" # U207b - : "㆒" # U3192 - : "㆜" # U319c - : "㆔" # U3194 - : "㆖" # U3196 - : "㆘" # U3198 - : "㆛" # U319b - : "㆗" # U3197 - : "㆚" # U319a - : "㆓" # U3193 - : "㆟" # U319f - : "㆕" # U3195 - : "㆞" # U319e - : "㆝" # U319d - : "㆙" # U3199 - : "^" # U5e - : "Ậ" # U1eac - : "Ệ" # U1ec6 - : "Ộ" # U1ed8 - : "ậ" # U1ead - : "ệ" # U1ec7 - : "ộ" # U1ed9 - : "℠" # U2120 - : "℠" # U2120 - : "™" # U2122 - : "™" # U2122 - : "ª" # Uaa - : "ʰ" # U2b0 - : "ⁱ" # U2071 - : "ʲ" # U2b2 - : "ˡ" # U2e1 - : "ⁿ" # U207f - : "º" # Uba - : "ʳ" # U2b3 - : "ˢ" # U2e2 - : "ʷ" # U2b7 - : "ˣ" # U2e3 - : "ʸ" # U2b8 - : "ˠ" # U2e0 - : "ʱ" # U2b1 - : "ʴ" # U2b4 - : "ʵ" # U2b5 - : "ʶ" # U2b6 - : "ˤ" # U2e4 - : "℠" # U2120 - : "℠" # U2120 - : "™" # U2122 - : "™" # U2122 - : "ª" # Uaa - : "ʰ" # U2b0 - : "ⁱ" # U2071 - : "ʲ" # U2b2 - : "ˡ" # U2e1 - : "ⁿ" # U207f - : "º" # Uba - : "ʳ" # U2b3 - : "ˢ" # U2e2 - : "ʷ" # U2b7 - : "ˣ" # U2e3 - : "ʸ" # U2b8 - : "ˠ" # U2e0 - : "ʱ" # U2b1 - : "ʴ" # U2b4 - : "ʵ" # U2b5 - : "ʶ" # U2b6 - : "ˤ" # U2e4 - : "²" # Ub2 - : "⁺" # U207a - : "⁰" # U2070 - : "¹" # Ub9 - : "²" # Ub2 - : "³" # Ub3 - : "⁴" # U2074 - : "⁵" # U2075 - : "⁶" # U2076 - : "⁷" # U2077 - : "⁸" # U2078 - : "⁹" # U2079 - : "⁼" # U207c - : "~" # U7e - : "≲" # U2272 - : "≃" # U2243 - : "≳" # U2273 - : "̃" # U303 - : "Ṍ" # U1e4c - : "Ṏ" # U1e4e - : "Ṹ" # U1e78 - : "ṍ" # U1e4d - : "ṏ" # U1e4f - : "ṹ" # U1e79 - : "Ȭ" # U22c - : "ȭ" # U22d - : "ἆ" # U1f06 - : "ἇ" # U1f07 - : "Ἆ" # U1f0e - : "Ἇ" # U1f0f - : "ἦ" # U1f26 - : "ἧ" # U1f27 - : "Ἦ" # U1f2e - : "Ἧ" # U1f2f - : "ἶ" # U1f36 - : "ἷ" # U1f37 - : "Ἶ" # U1f3e - : "Ἷ" # U1f3f - : "ὖ" # U1f56 - : "ὗ" # U1f57 - : "Ὗ" # U1f5f - : "ὦ" # U1f66 - : "ὧ" # U1f67 - : "Ὦ" # U1f6e - : "Ὧ" # U1f6f - : "~" # U7e - : "ῗ" # U1fd7 - : "ῧ" # U1fe7 - : "Ἇ" # U1f0f - : "Ἧ" # U1f2f - : "Ἷ" # U1f3f - : "Ὗ" # U1f5f - : "Ὧ" # U1f6f - : "ἇ" # U1f07 - : "ἧ" # U1f27 - : "ἷ" # U1f37 - : "ὗ" # U1f57 - : "ὧ" # U1f67 - : "Ἆ" # U1f0e - : "Ἦ" # U1f2e - : "Ἶ" # U1f3e - : "Ὦ" # U1f6e - : "ἆ" # U1f06 - : "ἦ" # U1f26 - : "ἶ" # U1f36 - : "ὖ" # U1f56 - : "ὦ" # U1f66 - : "Ỡ" # U1ee0 - : "Ữ" # U1eee - : "ỡ" # U1ee1 - : "ữ" # U1eef - : "Ẵ" # U1eb4 - : "ẵ" # U1eb5 - : "Ẫ" # U1eaa - : "Ễ" # U1ec4 - : "Ỗ" # U1ed6 - : "ẫ" # U1eab - : "ễ" # U1ec5 - : "ỗ" # U1ed7 - : "Ẵ" # U1eb4 - : "ẵ" # U1eb5 - : "¯" # Uaf - : "Ǖ" # U1d5 - : "ǖ" # U1d6 - : "̄" # U304 - : "Ḕ" # U1e14 - : "Ḗ" # U1e16 - : "Ṑ" # U1e50 - : "Ṓ" # U1e52 - : "ḕ" # U1e15 - : "ḗ" # U1e17 - : "ṑ" # U1e51 - : "ṓ" # U1e53 - : "¯" # Uaf - : "Ᾱ" # U1fb9 - : "Ῑ" # U1fd9 - : "Ῡ" # U1fe9 - : "ᾱ" # U1fb1 - : "ῑ" # U1fd1 - : "ῡ" # U1fe1 - : "Ḹ" # U1e38 - : "Ṝ" # U1e5c - : "ḹ" # U1e39 - : "ṝ" # U1e5d - : "Ǟ" # U1de - : "Ȫ" # U22a - : "Ǖ" # U1d5 - : "ǟ" # U1df - : "ȫ" # U22b - : "ǖ" # U1d6 - : "Ǡ" # U1e0 - : "Ȱ" # U230 - : "ǡ" # U1e1 - : "ȱ" # U231 - : "Ǭ" # U1ec - : "ǭ" # U1ed - : "Ȭ" # U22c - : "ȭ" # U22d - : "˘" # U2d8 - : "̆" # U306 - : "Ằ" # U1eb0 - : "Ắ" # U1eae - : "Ẵ" # U1eb4 - : "ằ" # U1eb1 - : "ắ" # U1eaf - : "ẵ" # U1eb5 - : "˘" # U2d8 - : "Ặ" # U1eb6 - : "ặ" # U1eb7 - : "Ḝ" # U1e1c - : "ḝ" # U1e1d - : "Ḝ" # U1e1c - : "ḝ" # U1e1d - : "˙" # U2d9 - : "Ŀ" # U13f - : "ı" # U131 - : "ȷ" # U237 - : "ŀ" # U140 - : "̇" # U307 - : "Ǡ" # U1e0 - : "Ȱ" # U230 - : "ǡ" # U1e1 - : "ȱ" # U231 - : "˙" # U2d9 - : "ɟ" # U25f - : "Ṩ" # U1e68 - : "ṩ" # U1e69 - : "Ṥ" # U1e64 - : "ṥ" # U1e65 - : "Ṧ" # U1e66 - : "ṧ" # U1e67 - : "ẛ" # U1e9b - : "Ṥ" # U1e64 - : "ṥ" # U1e65 - : """ # U22 - : "̈́" # U344 - : "̈" # U308 - : "̈́" # U344 - : "Ḯ" # U1e2e - : "Ǜ" # U1db - : "Ǘ" # U1d7 - : "ḯ" # U1e2f - : "ǜ" # U1dc - : "ǘ" # U1d8 - : "Ǚ" # U1d9 - : "ǚ" # U1da - : "Ǟ" # U1de - : "ǟ" # U1df - : "ȫ" # U22b - : "΅" # U385 - : "¨" # Ua8 - : "⩷" # U2a77 - : "Ṻ" # U1e7a - : "ṻ" # U1e7b - : "Ṏ" # U1e4e - : "ṏ" # U1e4f - : "Ṻ" # U1e7a - : "ṻ" # U1e7b - : "°" # Ub0 - : "̊" # U30a - : "Ǻ" # U1fa - : "ǻ" # U1fb - : "°" # Ub0 - : "˝" # U2dd - : "̋" # U30b - : "˝" # U2dd - : "ˇ" # U2c7 - : "₍" # U208d - : "₎" # U208e - : "₊" # U208a - : "₋" # U208b - : "₀" # U2080 - : "₁" # U2081 - : "₂" # U2082 - : "₃" # U2083 - : "₄" # U2084 - : "₅" # U2085 - : "₆" # U2086 - : "₇" # U2087 - : "₈" # U2088 - : "₉" # U2089 - : "₌" # U208c - : "Ǚ" # U1d9 - : "ǚ" # U1da - : "̌" # U30c - : "Dž" # U1c5 - : "ˇ" # U2c7 - : "Ǚ" # U1d9 - : "ǚ" # U1da - : "¸" # Ub8 - : "̧" # U327 - : "₵" # U20b5 - : "¸" # Ub8 - : "₵" # U20b5 - : "₵" # U20b5 - : "˛" # U2db - : "̨" # U328 - : "˛" # U2db - : "ͺ" # U37a - : "ᾊ" # U1f8a - : "ᾚ" # U1f9a - : "ᾪ" # U1faa - : "ᾂ" # U1f82 - : "ᾒ" # U1f92 - : "ᾢ" # U1fa2 - : "ᾋ" # U1f8b - : "ᾛ" # U1f9b - : "ᾫ" # U1fab - : "ᾃ" # U1f83 - : "ᾓ" # U1f93 - : "ᾣ" # U1fa3 +# n_index_size: 30 +# data_size: 16521 +# n_chars: 1572 + : "ΐ" # U390 + : "ΰ" # U3b0 + : "`" # U60 + : "M̀" + : "Ǜ" # U1db + : "m̀" + : "ǜ" # U1dc + : "̀" # U300 + : "Ɔ̀" + : "Ǝ̀" + : "Ɛ̀" + : "Ɩ̀" + : "Ʊ̀" + : "Ʋ̀" + : "ǝ̀" + : "ɔ̀" + : "ɛ̀" + : "ɩ̀" + : "ʊ̀" + : "ʋ̀" + : "Ŋ̀" + : "ŋ̀" + : "а̀" + : "о̀" + : "р̀" + : "у̀" + : "А̀" + : "О̀" + : "Р̀" + : "У̀" + : "ἂ" # U1f02 + : "ἃ" # U1f03 + : "Ἂ" # U1f0a + : "Ἃ" # U1f0b + : "ἒ" # U1f12 + : "ἓ" # U1f13 + : "Ἒ" # U1f1a + : "Ἓ" # U1f1b + : "ἢ" # U1f22 + : "ἣ" # U1f23 + : "Ἢ" # U1f2a + : "Ἣ" # U1f2b + : "ἲ" # U1f32 + : "ἳ" # U1f33 + : "Ἲ" # U1f3a + : "Ἳ" # U1f3b + : "ὂ" # U1f42 + : "ὃ" # U1f43 + : "Ὂ" # U1f4a + : "Ὃ" # U1f4b + : "ὒ" # U1f52 + : "ὓ" # U1f53 + : "Ὓ" # U1f5b + : "ὢ" # U1f62 + : "ὣ" # U1f63 + : "Ὢ" # U1f6a + : "Ὣ" # U1f6b + : "`" # U60 + : "Ã̀" + : "Ẽ̀" + : "Ĩ̀" + : "Õ̀" + : "Ũ̀" + : "ã̀" + : "ẽ̀" + : "ĩ̀" + : "õ̀" + : "ũ̀" + : "Ɔ̃̀" + : "Ǝ̃̀" + : "Ɛ̃̀" + : "ǝ̃̀" + : "ɔ̃̀" + : "ɛ̃̀" + : "Ǜ" # U1db + : "ǜ" # U1dc + : "ῒ" # U1fd2 + : "ῢ" # U1fe2 + : "Ἃ" # U1f0b + : "Ἓ" # U1f1b + : "Ἣ" # U1f2b + : "Ἳ" # U1f3b + : "Ὃ" # U1f4b + : "Ὓ" # U1f5b + : "Ὣ" # U1f6b + : "ἃ" # U1f03 + : "ἓ" # U1f13 + : "ἣ" # U1f23 + : "ἳ" # U1f33 + : "ὃ" # U1f43 + : "ὓ" # U1f53 + : "ὣ" # U1f63 + : "Ἂ" # U1f0a + : "Ἒ" # U1f1a + : "Ἢ" # U1f2a + : "Ἲ" # U1f3a + : "Ὂ" # U1f4a + : "Ὢ" # U1f6a + : "ἂ" # U1f02 + : "ἒ" # U1f12 + : "ἢ" # U1f22 + : "ἲ" # U1f32 + : "ὂ" # U1f42 + : "ὒ" # U1f52 + : "ὢ" # U1f62 + : "Ờ" # U1edc + : "Ừ" # U1eea + : "ờ" # U1edd + : "ừ" # U1eeb + : "Ằ" # U1eb0 + : "ằ" # U1eb1 + : "Ầ" # U1ea6 + : "Ề" # U1ec0 + : "Ồ" # U1ed2 + : "ầ" # U1ea7 + : "ề" # U1ec1 + : "ồ" # U1ed3 + : "Ḕ" # U1e14 + : "Ṑ" # U1e50 + : "ḕ" # U1e15 + : "ṑ" # U1e51 + : "Ằ" # U1eb0 + : "ằ" # U1eb1 + : "Ḕ" # U1e14 + : "Ṑ" # U1e50 + : "ḕ" # U1e15 + : "ṑ" # U1e51 + : "'" # U27 + : "J́" + : "Ǘ" # U1d7 + : "j́" + : "ǘ" # U1d8 + : "́" # U301 + : "Ɔ́" + : "Ǝ́" + : "Ɛ́" + : "Ɩ́" + : "Ʊ́" + : "Ʋ́" + : "ǝ́" + : "ɔ́" + : "ɛ́" + : "ɩ́" + : "ʊ́" + : "ʋ́" + : "Ŋ́" + : "ŋ́" + : "ю́" + : "а́" + : "е́" + : "и́" + : "о́" + : "я́" + : "р́" + : "у́" + : "ы́" + : "э́" + : "Ю́́" + : "А́" + : "Е́" + : "И́" + : "О́" + : "Я́" + : "Р́" + : "У́" + : "Ы́" + : "Э́" + : "ἄ" # U1f04 + : "ἅ" # U1f05 + : "Ἄ" # U1f0c + : "Ἅ" # U1f0d + : "ἔ" # U1f14 + : "ἕ" # U1f15 + : "Ἔ" # U1f1c + : "Ἕ" # U1f1d + : "ἤ" # U1f24 + : "ἥ" # U1f25 + : "Ἤ" # U1f2c + : "Ἥ" # U1f2d + : "ἴ" # U1f34 + : "ἵ" # U1f35 + : "Ἴ" # U1f3c + : "Ἵ" # U1f3d + : "ὄ" # U1f44 + : "ὅ" # U1f45 + : "Ὄ" # U1f4c + : "Ὅ" # U1f4d + : "ὔ" # U1f54 + : "ὕ" # U1f55 + : "Ὕ" # U1f5d + : "ὤ" # U1f64 + : "ὥ" # U1f65 + : "Ὤ" # U1f6c + : "Ὥ" # U1f6d + : "´" # Ub4 + : "Ã́" + : "Ẽ́" + : "Ĩ́" + : "ã́" + : "ẽ́" + : "ĩ́" + : "Ɔ̃́" + : "Ǝ̃́" + : "Ɛ̃́" + : "ǝ̃́" + : "ɔ̃́" + : "ɛ̃́" + : "΅" # U385 + : "Ǿ" # U1fe + : "ǿ" # U1ff + : "Ḯ" # U1e2e + : "Ǘ" # U1d7 + : "ḯ" # U1e2f + : "ǘ" # U1d8 + : "ΐ" # U390 + : "ΰ" # U3b0 + : "Ἅ" # U1f0d + : "Ἕ" # U1f1d + : "Ἥ" # U1f2d + : "Ἵ" # U1f3d + : "Ὅ" # U1f4d + : "Ὕ" # U1f5d + : "Ὥ" # U1f6d + : "ἅ" # U1f05 + : "ἕ" # U1f15 + : "ἥ" # U1f25 + : "ἵ" # U1f35 + : "ὅ" # U1f45 + : "ὕ" # U1f55 + : "ὥ" # U1f65 + : "Ἄ" # U1f0c + : "Ἔ" # U1f1c + : "Ἤ" # U1f2c + : "Ἴ" # U1f3c + : "Ὄ" # U1f4c + : "Ὤ" # U1f6c + : "ἄ" # U1f04 + : "ἔ" # U1f14 + : "ἤ" # U1f24 + : "ἴ" # U1f34 + : "ὄ" # U1f44 + : "ὔ" # U1f54 + : "ὤ" # U1f64 + : "Ớ" # U1eda + : "Ứ" # U1ee8 + : "ớ" # U1edb + : "ứ" # U1ee9 + : "Ḉ" # U1e08 + : "ḉ" # U1e09 + : "Ǿ" # U1fe + : "ǿ" # U1ff + : "Ắ" # U1eae + : "ắ" # U1eaf + : "Ấ" # U1ea4 + : "Ế" # U1ebe + : "Ố" # U1ed0 + : "ấ" # U1ea5 + : "ế" # U1ebf + : "ố" # U1ed1 + : "Ḗ" # U1e16 + : "Ṓ" # U1e52 + : "ḗ" # U1e17 + : "ṓ" # U1e53 + : "Ắ" # U1eae + : "ắ" # U1eaf + : "Ǻ" # U1fa + : "ǻ" # U1fb + : "Ṍ" # U1e4c + : "Ṹ" # U1e78 + : "ṍ" # U1e4d + : "ṹ" # U1e79 + : "Ḗ" # U1e16 + : "Ṓ" # U1e52 + : "ḗ" # U1e17 + : "ṓ" # U1e53 + : "Ḉ" # U1e08 + : "ḉ" # U1e09 + : "Ǿ" # U1fe + : "ǿ" # U1ff + : "^" # U5e + : "⁽" # U207d + : "⁾" # U207e + : "⁺" # U207a + : "⁻" # U207b + : "⁰" # U2070 + : "¹" # Ub9 + : "²" # Ub2 + : "³" # Ub3 + : "⁴" # U2074 + : "⁵" # U2075 + : "⁶" # U2076 + : "⁷" # U2077 + : "⁸" # U2078 + : "⁹" # U2079 + : "⁼" # U207c + : "̂" # U302 + : "Ầ" # U1ea6 + : "Ấ" # U1ea4 + : "Ẫ" # U1eaa + : "Ề" # U1ec0 + : "Ế" # U1ebe + : "Ồ" # U1ed2 + : "Ố" # U1ed0 + : "Ỗ" # U1ed6 + : "ầ" # U1ea7 + : "ấ" # U1ea5 + : "ẫ" # U1eab + : "ề" # U1ec1 + : "ế" # U1ebf + : "ồ" # U1ed3 + : "ố" # U1ed1 + : "ỗ" # U1ed7 + : "Ɔ̂" + : "Ǝ̂" + : "Ɛ̂" + : "Ɩ̂" + : "Ʊ̂" + : "Ʋ̂" + : "ǝ̂" + : "ɔ̂" + : "ɛ̂" + : "ɩ̂" + : "ʊ̂" + : "ʋ̂" + : "а̂" + : "е̂" + : "и̂" + : "о̂" + : "р̂" + : "у̂" + : "А̂" + : "Е̂" + : "И̂" + : "О̂" + : "Р̂" + : "У̂" + : "Ậ" # U1eac + : "ậ" # U1ead + : "Ệ" # U1ec6 + : "ệ" # U1ec7 + : "Ộ" # U1ed8 + : "ộ" # U1ed9 + : "⁻" # U207b + : "㆒" # U3192 + : "㆜" # U319c + : "㆔" # U3194 + : "㆖" # U3196 + : "㆘" # U3198 + : "㆛" # U319b + : "㆗" # U3197 + : "㆚" # U319a + : "㆓" # U3193 + : "㆟" # U319f + : "㆕" # U3195 + : "㆞" # U319e + : "㆝" # U319d + : "㆙" # U3199 + : "^" # U5e + : "²" # Ub2 + : "⁺" # U207a + : "⁰" # U2070 + : "¹" # Ub9 + : "²" # Ub2 + : "³" # Ub3 + : "⁴" # U2074 + : "⁵" # U2075 + : "⁶" # U2076 + : "⁷" # U2077 + : "⁸" # U2078 + : "⁹" # U2079 + : "⁼" # U207c + : "Ậ" # U1eac + : "Ệ" # U1ec6 + : "Ộ" # U1ed8 + : "ậ" # U1ead + : "ệ" # U1ec7 + : "ộ" # U1ed9 + : "℠" # U2120 + : "℠" # U2120 + : "™" # U2122 + : "™" # U2122 + : "ª" # Uaa + : "ʰ" # U2b0 + : "ⁱ" # U2071 + : "ʲ" # U2b2 + : "ˡ" # U2e1 + : "ⁿ" # U207f + : "º" # Uba + : "ʳ" # U2b3 + : "ˢ" # U2e2 + : "ʷ" # U2b7 + : "ˣ" # U2e3 + : "ʸ" # U2b8 + : "ˠ" # U2e0 + : "ʱ" # U2b1 + : "ʴ" # U2b4 + : "ʵ" # U2b5 + : "ʶ" # U2b6 + : "ˤ" # U2e4 + : "℠" # U2120 + : "℠" # U2120 + : "™" # U2122 + : "™" # U2122 + : "ª" # Uaa + : "ʰ" # U2b0 + : "ⁱ" # U2071 + : "ʲ" # U2b2 + : "ˡ" # U2e1 + : "ⁿ" # U207f + : "º" # Uba + : "ʳ" # U2b3 + : "ˢ" # U2e2 + : "ʷ" # U2b7 + : "ˣ" # U2e3 + : "ʸ" # U2b8 + : "ˠ" # U2e0 + : "ʱ" # U2b1 + : "ʴ" # U2b4 + : "ʵ" # U2b5 + : "ʶ" # U2b6 + : "ˤ" # U2e4 + : "~" # U7e + : "≲" # U2272 + : "≃" # U2243 + : "≳" # U2273 + : "̃" # U303 + : "Ṍ" # U1e4c + : "Ṏ" # U1e4e + : "Ṹ" # U1e78 + : "ṍ" # U1e4d + : "ṏ" # U1e4f + : "ṹ" # U1e79 + : "Ɔ̃" + : "Ǝ̃" + : "Ɛ̃" + : "ǝ̃" + : "ɔ̃" + : "ɛ̃" + : "Ȭ" # U22c + : "ȭ" # U22d + : "ἆ" # U1f06 + : "ἇ" # U1f07 + : "Ἆ" # U1f0e + : "Ἇ" # U1f0f + : "ἦ" # U1f26 + : "ἧ" # U1f27 + : "Ἦ" # U1f2e + : "Ἧ" # U1f2f + : "ἶ" # U1f36 + : "ἷ" # U1f37 + : "Ἶ" # U1f3e + : "Ἷ" # U1f3f + : "ὖ" # U1f56 + : "ὗ" # U1f57 + : "Ὗ" # U1f5f + : "ὦ" # U1f66 + : "ὧ" # U1f67 + : "Ὦ" # U1f6e + : "Ὧ" # U1f6f + : "~" # U7e + : "ῗ" # U1fd7 + : "ῧ" # U1fe7 + : "Ἇ" # U1f0f + : "Ἧ" # U1f2f + : "Ἷ" # U1f3f + : "Ὗ" # U1f5f + : "Ὧ" # U1f6f + : "ἇ" # U1f07 + : "ἧ" # U1f27 + : "ἷ" # U1f37 + : "ὗ" # U1f57 + : "ὧ" # U1f67 + : "Ἆ" # U1f0e + : "Ἦ" # U1f2e + : "Ἶ" # U1f3e + : "Ὦ" # U1f6e + : "ἆ" # U1f06 + : "ἦ" # U1f26 + : "ἶ" # U1f36 + : "ὖ" # U1f56 + : "ὦ" # U1f66 + : "Ỡ" # U1ee0 + : "Ữ" # U1eee + : "ỡ" # U1ee1 + : "ữ" # U1eef + : "Ẵ" # U1eb4 + : "ẵ" # U1eb5 + : "Ẫ" # U1eaa + : "Ễ" # U1ec4 + : "Ỗ" # U1ed6 + : "ẫ" # U1eab + : "ễ" # U1ec5 + : "ỗ" # U1ed7 + : "Ẵ" # U1eb4 + : "ẵ" # U1eb5 + : "¯" # Uaf + : "Ǖ" # U1d5 + : "ǖ" # U1d6 + : "̄" # U304 + : "Ḕ" # U1e14 + : "Ḗ" # U1e16 + : "Ṑ" # U1e50 + : "Ṓ" # U1e52 + : "ḕ" # U1e15 + : "ḗ" # U1e17 + : "ṑ" # U1e51 + : "ṓ" # U1e53 + : "Ɔ̄" + : "Ǝ̄" + : "Ɛ̄" + : "Ɩ̄" + : "Ʊ̄" + : "Ʋ̄" + : "ǝ̄" + : "Ǭ" # U1ec + : "ǭ" # U1ed + : "Ǡ" # U1e0 + : "ǡ" # U1e1 + : "Ȱ" # U230 + : "ȱ" # U231 + : "ɔ̄" + : "ɛ̄" + : "ɩ̄" + : "ʊ̄" + : "ʋ̄" + : "а̄" + : "е̄" + : "о̄" + : "р̄" + : "А̄" + : "Е̄" + : "О̄" + : "Р̄" + : "Ḹ" # U1e38 + : "ḹ" # U1e39 + : "Ṝ" # U1e5c + : "ṝ" # U1e5d + : "¯" # Uaf + : "Ǖ" # U1d5 + : "ǖ" # U1d6 + : "Ᾱ" # U1fb9 + : "Ῑ" # U1fd9 + : "Ῡ" # U1fe9 + : "ᾱ" # U1fb1 + : "ῑ" # U1fd1 + : "ῡ" # U1fe1 + : "Ḹ" # U1e38 + : "Ṝ" # U1e5c + : "ḹ" # U1e39 + : "ṝ" # U1e5d + : "Ǟ" # U1de + : "Ȫ" # U22a + : "Ǖ" # U1d5 + : "ǟ" # U1df + : "ȫ" # U22b + : "ǖ" # U1d6 + : "Ǡ" # U1e0 + : "Ȱ" # U230 + : "ǡ" # U1e1 + : "ȱ" # U231 + : "Ǭ" # U1ec + : "ǭ" # U1ed + : "Ȭ" # U22c + : "ȭ" # U22d + : "˘" # U2d8 + : "̆" # U306 + : "Ằ" # U1eb0 + : "Ắ" # U1eae + : "Ẵ" # U1eb4 + : "ằ" # U1eb1 + : "ắ" # U1eaf + : "ẵ" # U1eb5 + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "Ặ" # U1eb6 + : "ặ" # U1eb7 + : "˘" # U2d8 + : "Ặ" # U1eb6 + : "ặ" # U1eb7 + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "˙" # U2d9 + : "Ŀ" # U13f + : "ı" # U131 + : "ȷ" # U237 + : "ŀ" # U140 + : "̇" # U307 + : "ẛ" # U1e9b + : "Ǡ" # U1e0 + : "Ȱ" # U230 + : "ǡ" # U1e1 + : "ȱ" # U231 + : "Ṩ" # U1e68 + : "ṩ" # U1e69 + : "˙" # U2d9 + : "ɟ" # U25f + : "Ṩ" # U1e68 + : "ṩ" # U1e69 + : "Ṥ" # U1e64 + : "ṥ" # U1e65 + : "Ṧ" # U1e66 + : "ṧ" # U1e67 + : "ẛ" # U1e9b + : "Ṥ" # U1e64 + : "ṥ" # U1e65 + : "\"" # U22 + : "̈́" # U344 + : "̈" # U308 + : "̈́" # U344 + : "Ḯ" # U1e2e + : "Ǜ" # U1db + : "Ǘ" # U1d7 + : "ḯ" # U1e2f + : "ǜ" # U1dc + : "ǘ" # U1d8 + : "Ǚ" # U1d9 + : "ǚ" # U1da + : "Ǟ" # U1de + : "Ȫ" # U22a + : "ǟ" # U1df + : "ȫ" # U22b + : "Ӛ" # U4da + : "ӛ" # U4db + : "Ӫ" # U4ea + : "ӫ" # U4eb + : "¨" # Ua8 + : "΅" # U385 + : "Ṻ" # U1e7a + : "ṻ" # U1e7b + : "⩷" # U2a77 + : "Ṻ" # U1e7a + : "ṻ" # U1e7b + : "Ṏ" # U1e4e + : "ṏ" # U1e4f + : "Ṻ" # U1e7a + : "ṻ" # U1e7b + : "°" # Ub0 + : "̊" # U30a + : "Ǻ" # U1fa + : "ǻ" # U1fb + : "°" # Ub0 + : "˝" # U2dd + : "̋" # U30b + : "˝" # U2dd + : "ˇ" # U2c7 + : "₍" # U208d + : "₎" # U208e + : "₊" # U208a + : "₋" # U208b + : "₀" # U2080 + : "₁" # U2081 + : "₂" # U2082 + : "₃" # U2083 + : "₄" # U2084 + : "₅" # U2085 + : "₆" # U2086 + : "₇" # U2087 + : "₈" # U2088 + : "₉" # U2089 + : "₌" # U208c + : "Ǚ" # U1d9 + : "ǚ" # U1da + : "̌" # U30c + : "Ɔ̌" + : "Ǝ̌" + : "Ɛ̌" + : "Ɩ̌" + : "Ʊ̌" + : "Ʋ̌" + : "ǝ̌" + : "Dž" # U1c5 + : "ɔ̌" + : "ɛ̌" + : "ɩ̌" + : "ʊ̌" + : "ʋ̌" + : "ˇ" # U2c7 + : "Ǚ" # U1d9 + : "ǚ" # U1da + : "¸" # Ub8 + : "̧" # U327 + : "₵" # U20b5 + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "¸" # Ub8 + : "₵" # U20b5 + : "₵" # U20b5 + : "˛" # U2db + : "̨" # U328 + : "˛" # U2db + : "ͺ" # U37a + : "ᾀ" # U1f80 + : "ᾁ" # U1f81 + : "ᾂ" # U1f82 + : "ᾃ" # U1f83 + : "ᾄ" # U1f84 + : "ᾅ" # U1f85 + : "ᾆ" # U1f86 + : "ᾇ" # U1f87 + : "ᾈ" # U1f88 + : "ᾉ" # U1f89 + : "ᾊ" # U1f8a + : "ᾋ" # U1f8b + : "ᾌ" # U1f8c + : "ᾍ" # U1f8d + : "ᾎ" # U1f8e + : "ᾏ" # U1f8f + : "ᾐ" # U1f90 + : "ᾑ" # U1f91 + : "ᾒ" # U1f92 + : "ᾓ" # U1f93 + : "ᾔ" # U1f94 + : "ᾕ" # U1f95 + : "ᾖ" # U1f96 + : "ᾗ" # U1f97 + : "ᾘ" # U1f98 + : "ᾙ" # U1f99 + : "ᾚ" # U1f9a + : "ᾛ" # U1f9b + : "ᾜ" # U1f9c + : "ᾝ" # U1f9d + : "ᾞ" # U1f9e + : "ᾟ" # U1f9f + : "ᾠ" # U1fa0 + : "ᾡ" # U1fa1 + : "ᾢ" # U1fa2 + : "ᾣ" # U1fa3 + : "ᾤ" # U1fa4 + : "ᾥ" # U1fa5 + : "ᾦ" # U1fa6 + : "ᾧ" # U1fa7 + : "ᾨ" # U1fa8 + : "ᾩ" # U1fa9 + : "ᾪ" # U1faa + : "ᾫ" # U1fab + : "ᾬ" # U1fac + : "ᾭ" # U1fad + : "ᾮ" # U1fae + : "ᾯ" # U1faf + : "ᾲ" # U1fb2 + : "ῂ" # U1fc2 + : "ῲ" # U1ff2 + : "ᾷ" # U1fb7 + : "ῇ" # U1fc7 + : "ῷ" # U1ff7 + : "ͺ" # U37a + : "ᾂ" # U1f82 + : "ᾃ" # U1f83 + : "ᾊ" # U1f8a + : "ᾋ" # U1f8b + : "ᾒ" # U1f92 + : "ᾓ" # U1f93 + : "ᾚ" # U1f9a + : "ᾛ" # U1f9b + : "ᾢ" # U1fa2 + : "ᾣ" # U1fa3 + : "ᾪ" # U1faa + : "ᾫ" # U1fab + : "ᾄ" # U1f84 + : "ᾅ" # U1f85 + : "ᾌ" # U1f8c + : "ᾍ" # U1f8d + : "ᾔ" # U1f94 + : "ᾕ" # U1f95 + : "ᾜ" # U1f9c + : "ᾝ" # U1f9d + : "ᾤ" # U1fa4 + : "ᾥ" # U1fa5 + : "ᾬ" # U1fac + : "ᾭ" # U1fad + : "ᾆ" # U1f86 + : "ᾇ" # U1f87 + : "ᾎ" # U1f8e + : "ᾏ" # U1f8f + : "ᾖ" # U1f96 + : "ᾗ" # U1f97 + : "ᾞ" # U1f9e + : "ᾟ" # U1f9f + : "ᾦ" # U1fa6 + : "ᾧ" # U1fa7 + : "ᾮ" # U1fae + : "ᾯ" # U1faf + : "ᾊ" # U1f8a + : "ᾚ" # U1f9a + : "ᾪ" # U1faa + : "ᾂ" # U1f82 + : "ᾒ" # U1f92 + : "ᾢ" # U1fa2 + : "ᾋ" # U1f8b + : "ᾛ" # U1f9b + : "ᾫ" # U1fab + : "ᾃ" # U1f83 + : "ᾓ" # U1f93 + : "ᾣ" # U1fa3 + : "ᾌ" # U1f8c + : "ᾜ" # U1f9c + : "ᾬ" # U1fac + : "ᾄ" # U1f84 + : "ᾔ" # U1f94 + : "ᾤ" # U1fa4 + : "ᾍ" # U1f8d + : "ᾝ" # U1f9d + : "ᾭ" # U1fad + : "ᾅ" # U1f85 + : "ᾕ" # U1f95 + : "ᾥ" # U1fa5 + : "ᾎ" # U1f8e + : "ᾞ" # U1f9e + : "ᾮ" # U1fae + : "ᾆ" # U1f86 + : "ᾖ" # U1f96 + : "ᾦ" # U1fa6 + : "ᾏ" # U1f8f + : "ᾟ" # U1f9f + : "ᾯ" # U1faf + : "ᾇ" # U1f87 + : "ᾗ" # U1f97 + : "ᾧ" # U1fa7 + : "ᾴ" # U1fb4 + : "ῄ" # U1fc4 + : "ῴ" # U1ff4 + : "ᾄ" # U1f84 + : "ᾅ" # U1f85 + : "ᾌ" # U1f8c + : "ᾍ" # U1f8d + : "ᾔ" # U1f94 + : "ᾕ" # U1f95 + : "ᾜ" # U1f9c + : "ᾝ" # U1f9d + : "ᾤ" # U1fa4 + : "ᾥ" # U1fa5 + : "ᾬ" # U1fac + : "ᾭ" # U1fad + : "ᾉ" # U1f89 + : "ᾙ" # U1f99 + : "ᾩ" # U1fa9 + : "ᾁ" # U1f81 + : "ᾑ" # U1f91 + : "ᾡ" # U1fa1 + : "ᾈ" # U1f88 + : "ᾘ" # U1f98 + : "ᾨ" # U1fa8 + : "ᾀ" # U1f80 + : "ᾐ" # U1f90 + : "ᾠ" # U1fa0 + : "ᾲ" # U1fb2 + : "ῂ" # U1fc2 + : "ῲ" # U1ff2 + : "ᾂ" # U1f82 + : "ᾃ" # U1f83 + : "ᾊ" # U1f8a + : "ᾋ" # U1f8b + : "ᾒ" # U1f92 + : "ᾓ" # U1f93 + : "ᾚ" # U1f9a + : "ᾛ" # U1f9b + : "ᾢ" # U1fa2 + : "ᾣ" # U1fa3 + : "ᾪ" # U1faa + : "ᾫ" # U1fab + : "ᾷ" # U1fb7 + : "ῇ" # U1fc7 + : "ῷ" # U1ff7 + : "ᾆ" # U1f86 + : "ᾇ" # U1f87 + : "ᾎ" # U1f8e + : "ᾏ" # U1f8f + : "ᾖ" # U1f96 + : "ᾗ" # U1f97 + : "ᾞ" # U1f9e + : "ᾟ" # U1f9f + : "ᾦ" # U1fa6 + : "ᾧ" # U1fa7 + : "ᾮ" # U1fae + : "ᾯ" # U1faf + : "ᾴ" # U1fb4 + : "ῄ" # U1fc4 + : "ῴ" # U1ff4 + : "ᾄ" # U1f84 + : "ᾅ" # U1f85 + : "ᾌ" # U1f8c + : "ᾍ" # U1f8d + : "ᾔ" # U1f94 + : "ᾕ" # U1f95 + : "ᾜ" # U1f9c + : "ᾝ" # U1f9d + : "ᾤ" # U1fa4 + : "ᾥ" # U1fa5 + : "ᾬ" # U1fac + : "ᾭ" # U1fad : "ᾋ" # U1f8b : "ᾛ" # U1f9b : "ᾫ" # U1fab @@ -479,18 +906,6 @@ : "ᾂ" # U1f82 : "ᾒ" # U1f92 : "ᾢ" # U1fa2 - : "ᾌ" # U1f8c - : "ᾜ" # U1f9c - : "ᾬ" # U1fac - : "ᾄ" # U1f84 - : "ᾔ" # U1f94 - : "ᾤ" # U1fa4 - : "ᾍ" # U1f8d - : "ᾝ" # U1f9d - : "ᾭ" # U1fad - : "ᾅ" # U1f85 - : "ᾕ" # U1f95 - : "ᾥ" # U1fa5 : "ᾍ" # U1f8d : "ᾝ" # U1f9d : "ᾭ" # U1fad @@ -503,30 +918,6 @@ : "ᾄ" # U1f84 : "ᾔ" # U1f94 : "ᾤ" # U1fa4 - : "ᾆ" # U1f86 - : "ᾇ" # U1f87 - : "ᾎ" # U1f8e - : "ᾏ" # U1f8f - : "ᾖ" # U1f96 - : "ᾗ" # U1f97 - : "ᾞ" # U1f9e - : "ᾟ" # U1f9f - : "ᾦ" # U1fa6 - : "ᾧ" # U1fa7 - : "ᾮ" # U1fae - : "ᾯ" # U1faf - : "ᾎ" # U1f8e - : "ᾞ" # U1f9e - : "ᾮ" # U1fae - : "ᾆ" # U1f86 - : "ᾖ" # U1f96 - : "ᾦ" # U1fa6 - : "ᾏ" # U1f8f - : "ᾟ" # U1f9f - : "ᾯ" # U1faf - : "ᾇ" # U1f87 - : "ᾗ" # U1f97 - : "ᾧ" # U1fa7 : "ᾏ" # U1f8f : "ᾟ" # U1f9f : "ᾯ" # U1faf @@ -539,7 +930,6 @@ : "ᾆ" # U1f86 : "ᾖ" # U1f96 : "ᾦ" # U1fa6 - : "ͺ" # U37a : "ᾍ" # U1f8d : "ᾝ" # U1f9d : "ᾭ" # U1fad @@ -552,21 +942,6 @@ : "ᾄ" # U1f84 : "ᾔ" # U1f94 : "ᾤ" # U1fa4 - : "ᾴ" # U1fb4 - : "ῄ" # U1fc4 - : "ῴ" # U1ff4 - : "ᾄ" # U1f84 - : "ᾅ" # U1f85 - : "ᾌ" # U1f8c - : "ᾍ" # U1f8d - : "ᾔ" # U1f94 - : "ᾕ" # U1f95 - : "ᾜ" # U1f9c - : "ᾝ" # U1f9d - : "ᾤ" # U1fa4 - : "ᾥ" # U1fa5 - : "ᾬ" # U1fac - : "ᾭ" # U1fad : "ᾌ" # U1f8c : "ᾜ" # U1f9c : "ᾬ" # U1fac @@ -579,18 +954,6 @@ : "ᾅ" # U1f85 : "ᾕ" # U1f95 : "ᾥ" # U1fa5 - : "ᾉ" # U1f89 - : "ᾙ" # U1f99 - : "ᾩ" # U1fa9 - : "ᾁ" # U1f81 - : "ᾑ" # U1f91 - : "ᾡ" # U1fa1 - : "ᾈ" # U1f88 - : "ᾘ" # U1f98 - : "ᾨ" # U1fa8 - : "ᾀ" # U1f80 - : "ᾐ" # U1f90 - : "ᾠ" # U1fa0 : "ᾋ" # U1f8b : "ᾛ" # U1f9b : "ᾫ" # U1fab @@ -603,21 +966,6 @@ : "ᾂ" # U1f82 : "ᾒ" # U1f92 : "ᾢ" # U1fa2 - : "ᾲ" # U1fb2 - : "ῂ" # U1fc2 - : "ῲ" # U1ff2 - : "ᾂ" # U1f82 - : "ᾃ" # U1f83 - : "ᾊ" # U1f8a - : "ᾋ" # U1f8b - : "ᾒ" # U1f92 - : "ᾓ" # U1f93 - : "ᾚ" # U1f9a - : "ᾛ" # U1f9b - : "ᾢ" # U1fa2 - : "ᾣ" # U1fa3 - : "ᾪ" # U1faa - : "ᾫ" # U1fab : "ᾊ" # U1f8a : "ᾚ" # U1f9a : "ᾪ" # U1faa @@ -642,21 +990,6 @@ : "ᾆ" # U1f86 : "ᾖ" # U1f96 : "ᾦ" # U1fa6 - : "ᾷ" # U1fb7 - : "ῇ" # U1fc7 - : "ῷ" # U1ff7 - : "ᾆ" # U1f86 - : "ᾇ" # U1f87 - : "ᾎ" # U1f8e - : "ᾏ" # U1f8f - : "ᾖ" # U1f96 - : "ᾗ" # U1f97 - : "ᾞ" # U1f9e - : "ᾟ" # U1f9f - : "ᾦ" # U1fa6 - : "ᾧ" # U1fa7 - : "ᾮ" # U1fae - : "ᾯ" # U1faf : "ᾎ" # U1f8e : "ᾞ" # U1f9e : "ᾮ" # U1fae @@ -681,21 +1014,6 @@ : "ᾄ" # U1f84 : "ᾔ" # U1f94 : "ᾤ" # U1fa4 - : "ᾴ" # U1fb4 - : "ῄ" # U1fc4 - : "ῴ" # U1ff4 - : "ᾄ" # U1f84 - : "ᾅ" # U1f85 - : "ᾌ" # U1f8c - : "ᾍ" # U1f8d - : "ᾔ" # U1f94 - : "ᾕ" # U1f95 - : "ᾜ" # U1f9c - : "ᾝ" # U1f9d - : "ᾤ" # U1fa4 - : "ᾥ" # U1fa5 - : "ᾬ" # U1fac - : "ᾭ" # U1fad : "ᾌ" # U1f8c : "ᾜ" # U1f9c : "ᾬ" # U1fac @@ -708,620 +1026,3512 @@ : "ᾅ" # U1f85 : "ᾕ" # U1f95 : "ᾥ" # U1fa5 - : "̣" # U323 - : "⨥" # U2a25 - : "⨪" # U2a2a - : "⩦" # U2a66 - : "̣" # U323 - : "̣" # U323 - : "Ợ" # U1ee2 - : "Ự" # U1ef0 - : "ợ" # U1ee3 - : "ự" # U1ef1 - : "̉" # U309 - : "Ɓ" # U181 - : "Ƈ" # U187 - : "Ɗ" # U18a - : "Ƒ" # U191 - : "Ɠ" # U193 - : "Ƙ" # U198 - : "Ɱ" # U2c6e - : "Ɲ" # U19d - : "Ƥ" # U1a4 - : "Ƭ" # U1ac - : "Ʋ" # U1b2 - : "Ⱳ" # U2c72 - : "Ȥ" # U224 - : "ɓ" # U253 - : "ƈ" # U188 - : "ɗ" # U257 - : "ƒ" # U192 - : "ɠ" # U260 - : "ɦ" # U266 - : "ƙ" # U199 - : "ɱ" # U271 - : "ɲ" # U272 - : "ƥ" # U1a5 - : "ʠ" # U2a0 - : "ɼ" # U27c - : "ʂ" # U282 - : "ƭ" # U1ad - : "ʋ" # U28b - : "ⱳ" # U2c73 - : "ȥ" # U225 - : "̉" # U309 - : "ᶑ" # U1d91 - : "ɝ" # U25d - : "ʄ" # U284 - : "ɻ" # U27b - : "̉" # U309 - : "ϒ" # U3d2 - : "Ở" # U1ede - : "Ử" # U1eec - : "ở" # U1edf - : "ử" # U1eed - : "Ẳ" # U1eb2 - : "ẳ" # U1eb3 - : "Ẩ" # U1ea8 - : "Ể" # U1ec2 - : "Ổ" # U1ed4 - : "ẩ" # U1ea9 - : "ể" # U1ec3 - : "ổ" # U1ed5 - : "Ẳ" # U1eb2 - : "ẳ" # U1eb3 - : "̛" # U31b - : "̛" # U31b - : "̛" # U31b - : "/" # U2f - : "ƻ" # U1bb - : "Ⱥ" # U23a - : "Ƀ" # U243 - : "Ȼ" # U23b - : "Đ" # U110 - : "Ɇ" # U246 - : "Ǥ" # U1e4 - : "Ħ" # U126 - : "Ɨ" # U197 - : "Ɉ" # U248 - : "Ł" # U141 - : "Ø" # Ud8 - : "Ᵽ" # U2c63 - : "Ɍ" # U24c - : "Ŧ" # U166 - : "Ʉ" # U244 - : "Ɏ" # U24e - : "Ƶ" # U1b5 - : "ⱥ" # U2c65 - : "ƀ" # U180 - : "ȼ" # U23c - : "đ" # U111 - : "ɇ" # U247 - : "ǥ" # U1e5 - : "ħ" # U127 - : "ɨ" # U268 - : "ɉ" # U249 - : "ł" # U142 - : "ø" # Uf8 - : "ᵽ" # U1d7d - : "ɍ" # U24d - : "ŧ" # U167 - : "ʉ" # U289 - : "ɏ" # U24f - : "ƶ" # U1b6 - : "̸" # U338 - : "Ǿ" # U1fe - : "ǿ" # U1ff - : "ɟ" # U25f - : "ᵼ" # U1d7c - : "≰" # U2270 - : "≱" # U2271 - : "Ǿ" # U1fe - : "ǿ" # U1ff - : "ɟ" # U25f - : "/" # U2f - : "ϼ" # U3fc - : "⫰" # U2af0 - : "⨦" # U2a26 - : "⩷" # U2a77 - : "," # U2c - : "̦" # U326 - : "," # U2c - : "¤" # Ua4 - : "₳" # U20b3 - : "₱" # U20b1 - : "₡" # U20a1 - : "₯" # U20af - : "₠" # U20a0 - : "₣" # U20a3 - : "₲" # U20b2 - : "₴" # U20b4 - : "៛" # U17db - : "₭" # U20ad - : "₤" # U20a4 - : "ℳ" # U2133 - : "₦" # U20a6 - : "૱" # Uaf1 - : "₧" # U20a7 - : "₨" # U20a8 - : "$" # U24 - : "₮" # U20ae - : "圓" # U5713 - : "₩" # U20a9 - : "円" # U5186 - : "؋" # U60b - : "฿" # Ue3f - : "¢" # Ua2 - : "₫" # U20ab - : "€" # U20ac - : "ƒ" # U192 - : "₲" # U20b2 - : "₴" # U20b4 - : "﷼" # Ufdfc - : "₭" # U20ad - : "£" # Ua3 - : "₥" # U20a5 - : "₦" # U20a6 - : "௹" # Ubf9 - : "₰" # U20b0 - : "₢" # U20a2 - : "₪" # U20aa - : "৳" # U9f3 - : "元" # U5143 - : "₩" # U20a9 - : "¥" # Ua5 - : "¤" # Ua4 - : "₵" # U20b5 - : "৲" # U9f2 - : "₵" # U20b5 - : "৲" # U9f2 - : "₵" # U20b5 - : "₵" # U20b5 - : "¤" # Ua4 - : "µ" # Ub5 - : "Α" # U391 - : "Β" # U392 - : "Δ" # U394 - : "Ε" # U395 - : "Φ" # U3a6 - : "Γ" # U393 - : "Η" # U397 - : "Ι" # U399 - : "Θ" # U398 - : "Κ" # U39a - : "Λ" # U39b - : "Μ" # U39c - : "Ν" # U39d - : "Ο" # U39f - : "Π" # U3a0 - : "Χ" # U3a7 - : "Ρ" # U3a1 - : "Σ" # U3a3 - : "Τ" # U3a4 - : "Υ" # U3a5 - : "Ω" # U3a9 - : "Ξ" # U39e - : "Ψ" # U3a8 - : "Ζ" # U396 - : "α" # U3b1 - : "β" # U3b2 - : "δ" # U3b4 - : "ε" # U3b5 - : "φ" # U3c6 - : "γ" # U3b3 - : "η" # U3b7 - : "ι" # U3b9 - : "θ" # U3b8 - : "κ" # U3ba - : "λ" # U3bb - : "μ" # U3bc - : "ν" # U3bd - : "ο" # U3bf - : "π" # U3c0 - : "χ" # U3c7 - : "ρ" # U3c1 - : "σ" # U3c3 - : "τ" # U3c4 - : "υ" # U3c5 - : "ω" # U3c9 - : "ξ" # U3be - : "ψ" # U3c8 - : "ζ" # U3b6 - : "µ" # Ub5 - : "Ᾱ" # U1fb9 - : "Ῑ" # U1fd9 - : "Ῡ" # U1fe9 - : "ᾱ" # U1fb1 - : "ῑ" # U1fd1 - : "ῡ" # U1fe1 - : "ϒ" # U3d2 - : "ϼ" # U3fc - : "µ" # Ub5 - : " " # Ua0 - : "'" # U27 - : "˘" # U2d8 - : "¸" # Ub8 - : "~" # U7e - : " " # U2008 - : "ˇ" # U2c7 - : "^" # U5e - : "^" # U5e - : "`" # U60 - : "~" # U7e - : "¡" # Ua1 - : "Ợ" # U1ee2 - : "Ự" # U1ef0 - : "ợ" # U1ee3 - : "ự" # U1ef1 - : "‽" # U203d - : "Ạ" # U1ea0 - : "Ḅ" # U1e04 - : "Ḍ" # U1e0c - : "Ẹ" # U1eb8 - : "Ḥ" # U1e24 - : "Ị" # U1eca - : "Ḳ" # U1e32 - : "Ḷ" # U1e36 - : "Ṃ" # U1e42 - : "Ṇ" # U1e46 - : "Ọ" # U1ecc - : "¶" # Ub6 - : "Ṛ" # U1e5a - : "Ṣ" # U1e62 - : "Ṭ" # U1e6c - : "Ụ" # U1ee4 - : "Ṿ" # U1e7e - : "Ẉ" # U1e88 - : "Ỵ" # U1ef4 - : "Ẓ" # U1e92 - : "¦" # Ua6 - : "ạ" # U1ea1 - : "ḅ" # U1e05 - : "ḍ" # U1e0d - : "ẹ" # U1eb9 - : "ḥ" # U1e25 - : "ị" # U1ecb - : "ḳ" # U1e33 - : "ḷ" # U1e37 - : "ṃ" # U1e43 - : "ṇ" # U1e47 - : "ọ" # U1ecd - : "¶" # Ub6 - : "ṛ" # U1e5b - : "ṣ" # U1e63 - : "ṭ" # U1e6d - : "ụ" # U1ee5 - : "ṿ" # U1e7f - : "ẉ" # U1e89 - : "ỵ" # U1ef5 - : "ẓ" # U1e93 - : "Ợ" # U1ee2 - : "Ự" # U1ef0 - : "ợ" # U1ee3 - : "ự" # U1ef1 - : "¨" # Ua8 - : "̈́" # U344 - : "΅" # U385 - : "ΐ" # U390 - : "ΰ" # U3b0 - : "„" # U201e - : "“" # U201c - : "”" # U201d - : "Ä" # Uc4 - : "Ë" # Ucb - : "Ḧ" # U1e26 - : "Ï" # Ucf - : "Ö" # Ud6 - : "Ü" # Udc - : "Ẅ" # U1e84 - : "Ẍ" # U1e8c - : "Ÿ" # U178 - : "Ṻ" # U1e7a - : "ṻ" # U1e7b - : "ä" # Ue4 - : "ë" # Ueb - : "ḧ" # U1e27 - : "ï" # Uef - : "ö" # Uf6 - : "ẗ" # U1e97 - : "ü" # Ufc - : "ẅ" # U1e85 - : "ẍ" # U1e8d - : "ÿ" # Uff - : "Ṏ" # U1e4e - : "ṏ" # U1e4f - : "Ṻ" # U1e7a - : "ṻ" # U1e7b - : "̈́" # U344 - : "Ṏ" # U1e4e - : "ṏ" # U1e4f - : "ϔ" # U3d4 - : "Ṻ" # U1e7a - : "ṻ" # U1e7b - : "Ӛ" # U4da - : "ӛ" # U4db - : "Ӫ" # U4ea - : "ӫ" # U4eb - : "ї" # U457 - : "Ї" # U407 - : "ӓ" # U4d3 - : "ё" # U451 - : "ӥ" # U4e5 - : "ӧ" # U4e7 - : "ӱ" # U4f1 - : "ӝ" # U4dd - : "ӹ" # U4f9 - : "ӟ" # U4df - : "ӭ" # U4ed - : "ӵ" # U4f5 - : "Ӓ" # U4d2 - : "Ё" # U401 - : "Ӥ" # U4e4 - : "Ӧ" # U4e6 - : "Ӱ" # U4f0 - : "Ӝ" # U4dc - : "Ӹ" # U4f8 - : "Ӟ" # U4de - : "Ӭ" # U4ec - : "Ӵ" # U4f4 - : "Ϊ" # U3aa - : "Ϋ" # U3ab - : "ϊ" # U3ca - : "ϋ" # U3cb - : "̈́" # U344 - : "Ṏ" # U1e4e - : "ṏ" # U1e4f - : "Ṻ" # U1e7a - : "ṻ" # U1e7b - : "♯" # U266f - : "♫" # U266b - : "♬" # U266c - : "♭" # U266d - : "♪" # U266a - : "♮" # U266e - : "♩" # U2669 - : "‰" # U2030 - : "'" # U27 - : "΅" # U385 - : "Ḯ" # U1e2e - : "Ǘ" # U1d7 - : "ḯ" # U1e2f - : "ǘ" # U1d8 - : "ΐ" # U390 - : "ΰ" # U3b0 - : "´" # Ub4 - : "Ἅ" # U1f0d - : "Ἕ" # U1f1d - : "Ἥ" # U1f2d - : "Ἵ" # U1f3d - : "Ὅ" # U1f4d - : "Ὕ" # U1f5d - : "Ὥ" # U1f6d - : "ἅ" # U1f05 - : "ἕ" # U1f15 - : "ἥ" # U1f25 - : "ἵ" # U1f35 - : "ὅ" # U1f45 - : "ὕ" # U1f55 - : "ὥ" # U1f65 - : "Ἄ" # U1f0c - : "Ἔ" # U1f1c - : "Ἤ" # U1f2c - : "Ἴ" # U1f3c - : "Ὄ" # U1f4c - : "Ὤ" # U1f6c - : "ἄ" # U1f04 - : "ἔ" # U1f14 - : "ἤ" # U1f24 - : "ἴ" # U1f34 - : "ὄ" # U1f44 - : "ὔ" # U1f54 - : "ὤ" # U1f64 - : "Ớ" # U1eda - : "Ứ" # U1ee8 - : "ớ" # U1edb - : "ứ" # U1ee9 - : "‚" # U201a - : "Ǿ" # U1fe - : "ǿ" # U1ff - : "‘" # U2018 - : "’" # U2019 - : "Á" # Uc1 - : "Ć" # U106 - : "É" # Uc9 - : "Ǵ" # U1f4 - : "Í" # Ucd - : "Ḱ" # U1e30 - : "Ĺ" # U139 - : "Ḿ" # U1e3e - : "Ń" # U143 - : "Ó" # Ud3 - : "Ṕ" # U1e54 - : "Ŕ" # U154 - : "Ś" # U15a - : "Ú" # Uda - : "Ẃ" # U1e82 - : "Ý" # Udd - : "Ź" # U179 - : "Ấ" # U1ea4 - : "Ế" # U1ebe - : "Ố" # U1ed0 - : "ấ" # U1ea5 - : "ế" # U1ebf - : "ố" # U1ed1 - : "Ḗ" # U1e16 - : "Ṓ" # U1e52 - : "ḗ" # U1e17 - : "ṓ" # U1e53 - : "á" # Ue1 - : "Ắ" # U1eae - : "ắ" # U1eaf - : "ć" # U107 - : "é" # Ue9 - : "ǵ" # U1f5 - : "í" # Ued - : "ḱ" # U1e31 - : "ĺ" # U13a - : "ḿ" # U1e3f - : "ń" # U144 - : "ó" # Uf3 - : "ṕ" # U1e55 - : "ŕ" # U155 - : "ś" # U15b - : "ú" # Ufa - : "ẃ" # U1e83 - : "ý" # Ufd - : "ź" # U17a - : "Ṍ" # U1e4c - : "Ṹ" # U1e78 - : "ṍ" # U1e4d - : "ṹ" # U1e79 - : "Ḗ" # U1e16 - : "Ṓ" # U1e52 - : "ḗ" # U1e17 - : "ṓ" # U1e53 - : "Ḉ" # U1e08 - : "ḉ" # U1e09 - : "Ấ" # U1ea4 - : "Ǻ" # U1fa - : "Ǽ" # U1fc - : "Ḉ" # U1e08 - : "Ế" # U1ebe - : "Ḯ" # U1e2e - : "Ố" # U1ed0 - : "Ṍ" # U1e4c - : "Ǿ" # U1fe - : "Ǘ" # U1d7 - : "ấ" # U1ea5 - : "ǻ" # U1fb - : "ǽ" # U1fd - : "ḉ" # U1e09 - : "ế" # U1ebf - : "ḯ" # U1e2f - : "ố" # U1ed1 - : "ṍ" # U1e4d - : "ǿ" # U1ff - : "ǘ" # U1d8 - : "Ắ" # U1eae - : "ắ" # U1eaf - : "Ḗ" # U1e16 - : "ḗ" # U1e17 - : "Ṓ" # U1e52 - : "Ṹ" # U1e78 - : "ṓ" # U1e53 - : "ṹ" # U1e79 - : "ѓ" # U453 - : "ќ" # U45c - : "Ѓ" # U403 - : "Ќ" # U40c - : "ΐ" # U390 - : "ΰ" # U3b0 - : "Ά" # U386 - : "Έ" # U388 - : "Ή" # U389 - : "Ί" # U38a - : "Ό" # U38c - : "Ύ" # U38e - : "Ώ" # U38f - : "ά" # U3ac - : "έ" # U3ad - : "ή" # U3ae - : "ί" # U3af - : "ό" # U3cc - : "ύ" # U3cd - : "ώ" # U3ce - : "ἄ" # U1f04 - : "ἅ" # U1f05 - : "Ἄ" # U1f0c - : "Ἅ" # U1f0d - : "ἔ" # U1f14 - : "ἕ" # U1f15 - : "Ἔ" # U1f1c - : "Ἕ" # U1f1d - : "ἤ" # U1f24 - : "ἥ" # U1f25 - : "Ἤ" # U1f2c - : "Ἥ" # U1f2d - : "ἴ" # U1f34 - : "ἵ" # U1f35 - : "Ἴ" # U1f3c - : "Ἵ" # U1f3d - : "ὄ" # U1f44 - : "ὅ" # U1f45 - : "Ὄ" # U1f4c - : "Ὅ" # U1f4d - : "ὔ" # U1f54 - : "ὕ" # U1f55 - : "Ὕ" # U1f5d - : "ὤ" # U1f64 - : "ὥ" # U1f65 - : "Ὤ" # U1f6c - : "Ὥ" # U1f6d - : "⍞" # U235e - : "Ấ" # U1ea4 - : "Ế" # U1ebe - : "Ố" # U1ed0 - : "ấ" # U1ea5 - : "ế" # U1ebf - : "ố" # U1ed1 - : "Ṍ" # U1e4c - : "Ṹ" # U1e78 - : "ṍ" # U1e4d - : "ṹ" # U1e79 - : "Ḗ" # U1e16 - : "Ṓ" # U1e52 - : "ḗ" # U1e17 - : "ṓ" # U1e53 - : "Ắ" # U1eae - : "ắ" # U1eaf - : "Ḯ" # U1e2e - : "Ǘ" # U1d7 - : "ḯ" # U1e2f - : "ǘ" # U1d8 - : "ΐ" # U390 - : "ΰ" # U3b0 - : "Ǻ" # U1fa - : "ǻ" # U1fb - : "Ḉ" # U1e08 - : "ḉ" # U1e09 - : "Ớ" # U1eda - : "Ứ" # U1ee8 - : "ớ" # U1edb - : "ứ" # U1ee9 - : "Ἄ" # U1f0c - : "Ἔ" # U1f1c - : "Ἤ" # U1f2c - : "Ἴ" # U1f3c - : "Ὄ" # U1f4c - : "Ὤ" # U1f6c - : "ἄ" # U1f04 - : "ἔ" # U1f14 - : "ἤ" # U1f24 - : "ἴ" # U1f34 - : "ὄ" # U1f44 - : "ὔ" # U1f54 - : "ὤ" # U1f64 - : "Ἅ" # U1f0d - : "Ἕ" # U1f1d - : "Ἥ" # U1f2d - : "Ἵ" # U1f3d - : "Ὅ" # U1f4d - : "Ὕ" # U1f5d - : "Ὥ" # U1f6d - : "ἅ" # U1f05 - : "ἕ" # U1f15 - : "ἥ" # U1f25 - : "ἵ" # U1f35 - : "ὅ" # U1f45 - : "ὕ" # U1f55 - : "ὥ" # U1f65 - : "Ǿ" # U1fe - : "ǿ" # U1ff - : "˘" # U2d8 - : "[" # U5b - : "{" # U7b - : "⓪" # U24ea - : "①" # U2460 + : "ゔ" # U3094 + : "が" # U304c + : "ぎ" # U304e + : "ぐ" # U3050 + : "げ" # U3052 + : "ご" # U3054 + : "ざ" # U3056 + : "じ" # U3058 + : "ず" # U305a + : "ぜ" # U305c + : "ぞ" # U305e + : "だ" # U3060 + : "ぢ" # U3062 + : "づ" # U3065 + : "で" # U3067 + : "ど" # U3069 + : "ば" # U3070 + : "び" # U3073 + : "ぶ" # U3076 + : "べ" # U3079 + : "ぼ" # U307c + : "ゞ" # U309e + : "ヸ" # U30f8 + : "ヹ" # U30f9 + : "ヾ" # U30fe + : "ぱ" # U3071 + : "ぴ" # U3074 + : "ぷ" # U3077 + : "ぺ" # U307a + : "ぽ" # U307d + : "̣" # U323 + : "⨥" # U2a25 + : "⨪" # U2a2a + : "⩦" # U2a66 + : "̣" # U323 + : "̣" # U323 + : "Ợ" # U1ee2 + : "Ự" # U1ef0 + : "ợ" # U1ee3 + : "ự" # U1ef1 + : "̉" # U309 + : "Ɓ" # U181 + : "Ƈ" # U187 + : "Ɗ" # U18a + : "Ƒ" # U191 + : "Ɠ" # U193 + : "Ƙ" # U198 + : "Ɱ" # U2c6e + : "Ɲ" # U19d + : "Ƥ" # U1a4 + : "Ƭ" # U1ac + : "Ʋ" # U1b2 + : "Ⱳ" # U2c72 + : "Ȥ" # U224 + : "ɓ" # U253 + : "ƈ" # U188 + : "ɗ" # U257 + : "ƒ" # U192 + : "ɠ" # U260 + : "ɦ" # U266 + : "ƙ" # U199 + : "ɱ" # U271 + : "ɲ" # U272 + : "ƥ" # U1a5 + : "ʠ" # U2a0 + : "ɼ" # U27c + : "ʂ" # U282 + : "ƭ" # U1ad + : "ʋ" # U28b + : "ⱳ" # U2c73 + : "ȥ" # U225 + : "̉" # U309 + : "ᶑ" # U1d91 + : "ɝ" # U25d + : "ʄ" # U284 + : "ɻ" # U27b + : "̉" # U309 + : "ϒ" # U3d2 + : "Ở" # U1ede + : "Ử" # U1eec + : "ở" # U1edf + : "ử" # U1eed + : "Ẳ" # U1eb2 + : "ẳ" # U1eb3 + : "Ẩ" # U1ea8 + : "Ể" # U1ec2 + : "Ổ" # U1ed4 + : "ẩ" # U1ea9 + : "ể" # U1ec3 + : "ổ" # U1ed5 + : "Ẳ" # U1eb2 + : "ẳ" # U1eb3 + : "̛" # U31b + : "̛" # U31b + : "̛" # U31b + : "/" # U2f + : "ƻ" # U1bb + : "≮" # U226e + : "≠" # U2260 + : "≯" # U226f + : "Ⱥ" # U23a + : "Ƀ" # U243 + : "Ȼ" # U23b + : "Đ" # U110 + : "Ɇ" # U246 + : "Ǥ" # U1e4 + : "Ħ" # U126 + : "Ɨ" # U197 + : "Ɉ" # U248 + : "Ł" # U141 + : "Ø" # Ud8 + : "Ᵽ" # U2c63 + : "Ɍ" # U24c + : "Ŧ" # U166 + : "Ʉ" # U244 + : "Ɏ" # U24e + : "Ƶ" # U1b5 + : "ⱥ" # U2c65 + : "ƀ" # U180 + : "ȼ" # U23c + : "đ" # U111 + : "ɇ" # U247 + : "ǥ" # U1e5 + : "ħ" # U127 + : "ɨ" # U268 + : "ɉ" # U249 + : "ł" # U142 + : "ø" # Uf8 + : "ᵽ" # U1d7d + : "ɍ" # U24d + : "ŧ" # U167 + : "ʉ" # U289 + : "ɏ" # U24f + : "ƶ" # U1b6 + : "̸" # U338 + : "Ǿ" # U1fe + : "ǿ" # U1ff + : "ɟ" # U25f + : "ᵼ" # U1d7c + : "≰" # U2270 + : "≱" # U2271 + : "/" # U2f + : "Ǿ" # U1fe + : "ǿ" # U1ff + : "ɟ" # U25f + : "ϼ" # U3fc + : "Ѷ" # U476 + : "ѷ" # U477 + : "а̏" + : "е̏" + : "и̏" + : "о̏" + : "р̏" + : "у̏" + : "А̏" + : "Е̏" + : "И̏" + : "О̏" + : "Р̏" + : "У̏" + : "⫰" # U2af0 + : "⨦" # U2a26 + : "⩷" # U2a77 + : "Ȃ" # U202 + : "Ȇ" # U206 + : "Ȋ" # U20a + : "Ȏ" # U20e + : "Ȓ" # U212 + : "Ȗ" # U216 + : "ȃ" # U203 + : "ȇ" # U207 + : "ȋ" # U20b + : "ȏ" # U20f + : "ȓ" # U213 + : "ȗ" # U217 + : "а̑" + : "е̑" + : "и̑" + : "о̑" + : "р̑" + : "у̑" + : "А̑" + : "Е̑" + : "И̑" + : "О̑" + : "Р̑" + : "У̑" + : "," # U2c + : "̦" # U326 + : "," # U2c + : "¤" # Ua4 + : "₳" # U20b3 + : "₱" # U20b1 + : "₡" # U20a1 + : "₯" # U20af + : "₠" # U20a0 + : "₣" # U20a3 + : "₲" # U20b2 + : "₴" # U20b4 + : "៛" # U17db + : "₭" # U20ad + : "₤" # U20a4 + : "ℳ" # U2133 + : "₦" # U20a6 + : "૱" # Uaf1 + : "₧" # U20a7 + : "₨" # U20a8 + : "$" # U24 + : "₮" # U20ae + : "圓" # U5713 + : "₩" # U20a9 + : "円" # U5186 + : "؋" # U60b + : "฿" # Ue3f + : "¢" # Ua2 + : "₫" # U20ab + : "€" # U20ac + : "ƒ" # U192 + : "₲" # U20b2 + : "₴" # U20b4 + : "﷼" # Ufdfc + : "₭" # U20ad + : "£" # Ua3 + : "₥" # U20a5 + : "₦" # U20a6 + : "௹" # Ubf9 + : "₰" # U20b0 + : "₢" # U20a2 + : "₪" # U20aa + : "৳" # U9f3 + : "元" # U5143 + : "₩" # U20a9 + : "¥" # Ua5 + : "¤" # Ua4 + : "₵" # U20b5 + : "৲" # U9f2 + : "₵" # U20b5 + : "৲" # U9f2 + : "¤" # Ua4 + : "₵" # U20b5 + : "₵" # U20b5 + : "µ" # Ub5 + : "Α" # U391 + : "Β" # U392 + : "Δ" # U394 + : "Ε" # U395 + : "Φ" # U3a6 + : "Γ" # U393 + : "Η" # U397 + : "Ι" # U399 + : "Θ" # U398 + : "Κ" # U39a + : "Λ" # U39b + : "Μ" # U39c + : "Ν" # U39d + : "Ο" # U39f + : "Π" # U3a0 + : "Χ" # U3a7 + : "Ρ" # U3a1 + : "Σ" # U3a3 + : "Τ" # U3a4 + : "Υ" # U3a5 + : "Ω" # U3a9 + : "Ξ" # U39e + : "Ψ" # U3a8 + : "Ζ" # U396 + : "α" # U3b1 + : "β" # U3b2 + : "δ" # U3b4 + : "ε" # U3b5 + : "φ" # U3c6 + : "γ" # U3b3 + : "η" # U3b7 + : "ι" # U3b9 + : "θ" # U3b8 + : "κ" # U3ba + : "λ" # U3bb + : "μ" # U3bc + : "ν" # U3bd + : "ο" # U3bf + : "π" # U3c0 + : "χ" # U3c7 + : "ρ" # U3c1 + : "σ" # U3c3 + : "τ" # U3c4 + : "υ" # U3c5 + : "ω" # U3c9 + : "ξ" # U3be + : "ψ" # U3c8 + : "ζ" # U3b6 + : "µ" # Ub5 + : "µ" # Ub5 + : "Ᾱ" # U1fb9 + : "Ῑ" # U1fd9 + : "Ῡ" # U1fe9 + : "ᾱ" # U1fb1 + : "ῑ" # U1fd1 + : "ῡ" # U1fe1 + : "ϒ" # U3d2 + : "ϼ" # U3fc + : " " # Ua0 + : "'" # U27 + : "˘" # U2d8 + : "¸" # Ub8 + : "~" # U7e + : " " # U2008 + : "ˇ" # U2c7 + : "^" # U5e + : "^" # U5e + : "`" # U60 + : "~" # U7e + : "¡" # Ua1 + : "‽" # U203d + : "Ạ" # U1ea0 + : "Ḅ" # U1e04 + : "Ḍ" # U1e0c + : "Ẹ" # U1eb8 + : "Ḥ" # U1e24 + : "Ị" # U1eca + : "Ḳ" # U1e32 + : "Ḷ" # U1e36 + : "Ṃ" # U1e42 + : "Ṇ" # U1e46 + : "Ọ" # U1ecc + : "Ṛ" # U1e5a + : "Ṣ" # U1e62 + : "Ṭ" # U1e6c + : "Ụ" # U1ee4 + : "Ṿ" # U1e7e + : "Ẉ" # U1e88 + : "Ỵ" # U1ef4 + : "Ẓ" # U1e92 + : "¦" # Ua6 + : "ạ" # U1ea1 + : "ḅ" # U1e05 + : "ḍ" # U1e0d + : "ẹ" # U1eb9 + : "ḥ" # U1e25 + : "ị" # U1ecb + : "ḳ" # U1e33 + : "ḷ" # U1e37 + : "ṃ" # U1e43 + : "ṇ" # U1e47 + : "ọ" # U1ecd + : "ṛ" # U1e5b + : "ṣ" # U1e63 + : "ṭ" # U1e6d + : "ụ" # U1ee5 + : "ṿ" # U1e7f + : "ẉ" # U1e89 + : "ỵ" # U1ef5 + : "ẓ" # U1e93 + : "¨" # Ua8 + : "̈́" # U344 + : "„" # U201e + : "“" # U201c + : "”" # U201d + : "Ä" # Uc4 + : "Ë" # Ucb + : "Ḧ" # U1e26 + : "Ï" # Ucf + : "Ö" # Ud6 + : "Ü" # Udc + : "Ẅ" # U1e84 + : "Ẍ" # U1e8c + : "Ÿ" # U178 + : "ä" # Ue4 + : "ë" # Ueb + : "ḧ" # U1e27 + : "ï" # Uef + : "ö" # Uf6 + : "ẗ" # U1e97 + : "ü" # Ufc + : "ẅ" # U1e85 + : "ẍ" # U1e8d + : "ÿ" # Uff + : "̈́" # U344 + : "Ṏ" # U1e4e + : "ṏ" # U1e4f + : "ϔ" # U3d4 + : "Ṻ" # U1e7a + : "ṻ" # U1e7b + : "Ӛ" # U4da + : "ӛ" # U4db + : "Ӫ" # U4ea + : "ӫ" # U4eb + : "ї" # U457 + : "Ї" # U407 + : "ӓ" # U4d3 + : "ё" # U451 + : "ӥ" # U4e5 + : "ӧ" # U4e7 + : "ӱ" # U4f1 + : "ӝ" # U4dd + : "ӹ" # U4f9 + : "ӟ" # U4df + : "ӭ" # U4ed + : "ӵ" # U4f5 + : "Ӓ" # U4d2 + : "Ё" # U401 + : "Ӥ" # U4e4 + : "Ӧ" # U4e6 + : "Ӱ" # U4f0 + : "Ӝ" # U4dc + : "Ӹ" # U4f8 + : "Ӟ" # U4de + : "Ӭ" # U4ec + : "Ӵ" # U4f4 + : "Ϊ" # U3aa + : "Ϋ" # U3ab + : "ϊ" # U3ca + : "ϋ" # U3cb + : "̈́" # U344 + : "♯" # U266f + : "♫" # U266b + : "♬" # U266c + : "♭" # U266d + : "♪" # U266a + : "♮" # U266e + : "♩" # U2669 + : "‰" # U2030 + : "'" # U27 + : "´" # Ub4 + : "‚" # U201a + : "‘" # U2018 + : "’" # U2019 + : "Á" # Uc1 + : "Ć" # U106 + : "É" # Uc9 + : "Ǵ" # U1f4 + : "Í" # Ucd + : "J́" + : "Ḱ" # U1e30 + : "Ĺ" # U139 + : "Ḿ" # U1e3e + : "Ń" # U143 + : "Ó" # Ud3 + : "Ṕ" # U1e54 + : "Ŕ" # U154 + : "Ś" # U15a + : "Ú" # Uda + : "Ẃ" # U1e82 + : "Ý" # Udd + : "Ź" # U179 + : "á" # Ue1 + : "ć" # U107 + : "é" # Ue9 + : "ǵ" # U1f5 + : "í" # Ued + : "j́" + : "ḱ" # U1e31 + : "ĺ" # U13a + : "ḿ" # U1e3f + : "ń" # U144 + : "ó" # Uf3 + : "ṕ" # U1e55 + : "ŕ" # U155 + : "ś" # U15b + : "ú" # Ufa + : "ẃ" # U1e83 + : "ý" # Ufd + : "ź" # U17a + : "Ấ" # U1ea4 + : "Ǻ" # U1fa + : "Ǽ" # U1fc + : "Ḉ" # U1e08 + : "Ế" # U1ebe + : "Ḯ" # U1e2e + : "Ố" # U1ed0 + : "Ṍ" # U1e4c + : "Ǿ" # U1fe + : "Ǘ" # U1d7 + : "ấ" # U1ea5 + : "ǻ" # U1fb + : "ǽ" # U1fd + : "ḉ" # U1e09 + : "ế" # U1ebf + : "ḯ" # U1e2f + : "ố" # U1ed1 + : "ṍ" # U1e4d + : "ǿ" # U1ff + : "ǘ" # U1d8 + : "Ắ" # U1eae + : "ắ" # U1eaf + : "Ḗ" # U1e16 + : "ḗ" # U1e17 + : "Ṓ" # U1e52 + : "Ṹ" # U1e78 + : "ṓ" # U1e53 + : "ṹ" # U1e79 + : "ю́" + : "а́" + : "е́" + : "ѓ" # U453 + : "и́" + : "ќ" # U45c + : "о́" + : "я́" + : "р́" + : "у́" + : "ы́" + : "э́" + : "Ю́́" + : "А́" + : "Е́" + : "Ѓ" # U403 + : "И́" + : "Ќ" # U40c + : "О́" + : "Я́" + : "Р́" + : "У́" + : "Ы́" + : "Э́" + : "ΐ" # U390 + : "ΰ" # U3b0 + : "Ά" # U386 + : "Έ" # U388 + : "Ή" # U389 + : "Ί" # U38a + : "Ό" # U38c + : "Ύ" # U38e + : "Ώ" # U38f + : "ά" # U3ac + : "έ" # U3ad + : "ή" # U3ae + : "ί" # U3af + : "ό" # U3cc + : "ύ" # U3cd + : "ώ" # U3ce + : "ἄ" # U1f04 + : "ἅ" # U1f05 + : "Ἄ" # U1f0c + : "Ἅ" # U1f0d + : "ἔ" # U1f14 + : "ἕ" # U1f15 + : "Ἔ" # U1f1c + : "Ἕ" # U1f1d + : "ἤ" # U1f24 + : "ἥ" # U1f25 + : "Ἤ" # U1f2c + : "Ἥ" # U1f2d + : "ἴ" # U1f34 + : "ἵ" # U1f35 + : "Ἴ" # U1f3c + : "Ἵ" # U1f3d + : "ὄ" # U1f44 + : "ὅ" # U1f45 + : "Ὄ" # U1f4c + : "Ὅ" # U1f4d + : "ὔ" # U1f54 + : "ὕ" # U1f55 + : "Ὕ" # U1f5d + : "ὤ" # U1f64 + : "ὥ" # U1f65 + : "Ὤ" # U1f6c + : "Ὥ" # U1f6d + : "⍞" # U235e + : "˘" # U2d8 + : "[" # U5b + : "{" # U7b + : "Ἁ" # U1f09 + : "Ἑ" # U1f19 + : "Ἡ" # U1f29 + : "Ἱ" # U1f39 + : "Ὁ" # U1f49 + : "Ῥ" # U1fec + : "Ὑ" # U1f59 + : "Ὡ" # U1f69 + : "ἁ" # U1f01 + : "ἑ" # U1f11 + : "ἡ" # U1f21 + : "ἱ" # U1f31 + : "ὁ" # U1f41 + : "ῥ" # U1fe5 + : "ὑ" # U1f51 + : "ὡ" # U1f61 + : "]" # U5d + : "}" # U7d + : "Ἀ" # U1f08 + : "Ἐ" # U1f18 + : "Ἠ" # U1f28 + : "Ἰ" # U1f38 + : "Ὀ" # U1f48 + : "Ὠ" # U1f68 + : "ἀ" # U1f00 + : "ἐ" # U1f10 + : "ἠ" # U1f20 + : "ἰ" # U1f30 + : "ὀ" # U1f40 + : "ῤ" # U1fe4 + : "ὐ" # U1f50 + : "ὠ" # U1f60 + : "°" # Ub0 + : "Å" # Uc5 + : "Ů" # U16e + : "å" # Ue5 + : "ů" # U16f + : "⍣" # U2363 + : "⍟" # U235f + : "#" # U23 + : "±" # Ub1 + : "Ơ" # U1a0 + : "Ư" # U1af + : "ơ" # U1a1 + : "ư" # U1b0 + : "¸" # Ub8 + : "„" # U201e + : "‚" # U201a + : "¸" # Ub8 + : "¬" # Uac + : "Ą" # U104 + : "Ç" # Uc7 + : "Ḑ" # U1e10 + : "Ę" # U118 + : "Ģ" # U122 + : "Ḩ" # U1e28 + : "Į" # U12e + : "Ķ" # U136 + : "Ļ" # U13b + : "Ņ" # U145 + : "Ǫ" # U1ea + : "Ŗ" # U156 + : "Ş" # U15e + : "Ţ" # U162 + : "Ų" # U172 + : "ą" # U105 + : "ç" # Ue7 + : "ḑ" # U1e11 + : "ę" # U119 + : "ģ" # U123 + : "ḩ" # U1e29 + : "į" # U12f + : "ķ" # U137 + : "ļ" # U13c + : "ņ" # U146 + : "ǫ" # U1eb + : "ŗ" # U157 + : "ş" # U15f + : "ţ" # U163 + : "ų" # U173 + : "~" # U7e + : "{" # U7b + : "}" # U7d + : "±" # Ub1 + : "¬" # Uac + : "⌿" # U233f + : "÷" # Uf7 + : "→" # U2192 + : "Ā" # U100 + : "Đ" # U110 + : "Ē" # U112 + : "Ī" # U12a + : "£" # Ua3 + : "Ō" # U14c + : "Ū" # U16a + : "¥" # Ua5 + : "⍀" # U2340 + : "¯" # Uaf + : "ā" # U101 + : "đ" # U111 + : "ē" # U113 + : "ī" # U12b + : "£" # Ua3 + : "ō" # U14d + : "ū" # U16b + : "¥" # Ua5 + : "⍏" # U234f + : "⍖" # U2356 + : "⊖" # U2296 + : "·" # Ub7 + : "…" # U2026 + : "∵" # U2235 + : "‹" # U2039 + : "•" # U2022 + : "›" # U203a + : "Ȧ" # U226 + : "Ḃ" # U1e02 + : "Ċ" # U10a + : "Ḋ" # U1e0a + : "Ė" # U116 + : "Ḟ" # U1e1e + : "Ġ" # U120 + : "Ḣ" # U1e22 + : "İ" # U130 + : "Ṁ" # U1e40 + : "Ṅ" # U1e44 + : "Ȯ" # U22e + : "Ṗ" # U1e56 + : "Ṙ" # U1e58 + : "Ṡ" # U1e60 + : "Ṫ" # U1e6a + : "Ẇ" # U1e86 + : "Ẋ" # U1e8a + : "Ẏ" # U1e8e + : "Ż" # U17b + : "·" # Ub7 + : "ȧ" # U227 + : "ḃ" # U1e03 + : "ċ" # U10b + : "ḋ" # U1e0b + : "ė" # U117 + : "ḟ" # U1e1f + : "ġ" # U121 + : "ḣ" # U1e23 + : "ı" # U131 + : "ṁ" # U1e41 + : "ṅ" # U1e45 + : "ȯ" # U22f + : "ṗ" # U1e57 + : "ṙ" # U1e59 + : "ṡ" # U1e61 + : "ṫ" # U1e6b + : "ẇ" # U1e87 + : "ẋ" # U1e8b + : "ẏ" # U1e8f + : "ż" # U17c + : "ẛ" # U1e9b + : "Ṥ" # U1e64 + : "Ṧ" # U1e66 + : "ṥ" # U1e65 + : "ṧ" # U1e67 + : "Ṩ" # U1e68 + : "ṩ" # U1e69 + : "⊙" # U2299 + : "⌿" # U233f + : "\\" # U5c + : "\\" # U5c + : "≠" # U2260 + : "₡" # U20a1 + : "Đ" # U110 + : "Ǥ" # U1e4 + : "Ħ" # U126 + : "Ɨ" # U197 + : "Ł" # U141 + : "Ø" # Ud8 + : "Ŧ" # U166 + : "Ƶ" # U1b5 + : "|" # U7c + : "ƀ" # U180 + : "¢" # Ua2 + : "đ" # U111 + : "ǥ" # U1e5 + : "ħ" # U127 + : "ɨ" # U268 + : "ł" # U142 + : "₥" # U20a5 + : "ø" # Uf8 + : "ŧ" # U167 + : "µ" # Ub5 + : "√" # U221a + : "ƶ" # U1b6 + : "ʡ" # U2a1 + : "Ұ" # U4b0 + : "ұ" # U4b1 + : "ғ" # U493 + : "ҟ" # U49f + : "Ғ" # U492 + : "Ҟ" # U49e + : "↚" # U219a + : "↛" # U219b + : "↮" # U21ae + : "⍁" # U2341 + : "°" # Ub0 + : "↉" # U2189 + : "⍬" # U236c + : "½" # Ubd + : "⅓" # U2153 + : "¼" # Ubc + : "⅕" # U2155 + : "⅙" # U2159 + : "⅐" # U2150 + : "⅛" # U215b + : "⅑" # U2151 + : "¹" # Ub9 + : "⅔" # U2154 + : "⅖" # U2156 + : "²" # Ub2 + : "¾" # Ube + : "⅗" # U2157 + : "⅜" # U215c + : "³" # Ub3 + : "⅘" # U2158 + : "⅚" # U215a + : "⅝" # U215d + : "⅞" # U215e + : "∞" # U221e + : "☹" # U2639 + : "☺" # U263a + : "÷" # Uf7 + : "∴" # U2234 + : "⍠" # U2360 + : "Ą" # U104 + : "Ę" # U118 + : "Į" # U12e + : "Ǫ" # U1ea + : "Ș" # U218 + : "Ț" # U21a + : "Ų" # U172 + : "⍮" # U236e + : "ą" # U105 + : "ę" # U119 + : "į" # U12f + : "ǫ" # U1eb + : "ș" # U219 + : "ț" # U21b + : "ų" # U173 + : "ˇ" # U2c7 + : "“" # U201c + : "‘" # U2018 + : "←" # U2190 + : "\\" # U5c + : "♥" # U2665 + : "«" # Uab + : "≤" # U2264 + : "⋄" # U22c4 + : "Č" # U10c + : "Ď" # U10e + : "Ě" # U11a + : "Ľ" # U13d + : "Ň" # U147 + : "Ř" # U158 + : "Š" # U160 + : "Ť" # U164 + : "Ž" # U17d + : "≤" # U2264 + : "č" # U10d + : "ď" # U10f + : "ě" # U11b + : "ľ" # U13e + : "ň" # U148 + : "ř" # U159 + : "š" # U161 + : "ť" # U165 + : "ž" # U17e + : "≮" # U226e + : "⍃" # U2343 + : "≠" # U2260 + : "⇒" # U21d2 + : "€" # U20ac + : "€" # U20ac + : "₤" # U20a4 + : "₦" # U20a6 + : "Ő" # U150 + : "₽" # U20bd + : "₹" # U20b9 + : "Ű" # U170 + : "₩" # U20a9 + : "¥" # Ua5 + : "≡" # U2261 + : "€" # U20ac + : "₫" # U20ab + : "€" # U20ac + : "ő" # U151 + : "₽" # U20bd + : "₹" # U20b9 + : "ű" # U171 + : "¥" # Ua5 + : "≠" # U2260 + : "ӳ" # U4f3 + : "₽" # U20bd + : "€" # U20ac + : "€" # U20ac + : "Ӳ" # U4f2 + : "₽" # U20bd + : "⌸" # U2338 + : "^" # U5e + : "”" # U201d + : "’" # U2019 + : "⋄" # U22c4 + : "≥" # U2265 + : "»" # Ubb + : "Â" # Uc2 + : "Ê" # Uca + : "Î" # Uce + : "Ô" # Ud4 + : "Û" # Udb + : "≥" # U2265 + : "â" # Ue2 + : "ê" # Uea + : "î" # Uee + : "ô" # Uf4 + : "û" # Ufb + : "⍩" # U2369 + : "≯" # U226f + : "⍄" # U2344 + : "⸘" # U2e18 + : "¿" # Ubf + : "Ả" # U1ea2 + : "Ẻ" # U1eba + : "Ỉ" # U1ec8 + : "Ỏ" # U1ece + : "Ủ" # U1ee6 + : "Ỷ" # U1ef6 + : "ả" # U1ea3 + : "ẻ" # U1ebb + : "ỉ" # U1ec9 + : "ỏ" # U1ecf + : "ủ" # U1ee7 + : "ỷ" # U1ef7 + : "Ẩ" # U1ea8 + : "Ể" # U1ec2 + : "Ổ" # U1ed4 + : "ẩ" # U1ea9 + : "ể" # U1ec3 + : "ổ" # U1ed5 + : "Ẳ" # U1eb2 + : "ẳ" # U1eb3 + : "⍰" # U2370 + : "Ä" # Uc4 + : "Á" # Uc1 + : "Ă" # U102 + : "Å" # Uc5 + : "Ą" # U104 + : "Ā" # U100 + : "Ą" # U104 + : "Â" # Uc2 + : "Å" # Uc5 + : "Æ" # Uc6 + : "@" # U40 + : "Â" # Uc2 + : "Ā" # U100 + : "À" # Uc0 + : "Ã" # Uc3 + : "Ä" # Uc4 + : "Á" # Uc1 + : "Ḃ" # U1e02 + : "Ć" # U106 + : "Ç" # Uc7 + : "Ċ" # U10a + : "₡" # U20a1 + : "Č" # U10c + : "€" # U20ac + : "₠" # U20a0 + : "©" # Ua9 + : "©" # Ua9 + : "₢" # U20a2 + : "¢" # Ua2 + : "Ḑ" # U1e10 + : "Đ" # U110 + : "Ḋ" # U1e0a + : "Ď" # U10e + : "Ð" # Ud0 + : "Ë" # Ucb + : "É" # Uc9 + : "Ę" # U118 + : "Ē" # U112 + : "Ė" # U116 + : "Ę" # U118 + : "Ě" # U11a + : "€" # U20ac + : "Ê" # Uca + : "Ê" # Uca + : "Ē" # U112 + : "È" # Uc8 + : "Ë" # Ucb + : "É" # Uc9 + : "Ḟ" # U1e1e + : "🖕" # U1f595 + : "ffi" # Ufb03 + : "ffl" # Ufb04 + : "₣" # U20a3 + : "Ğ" # U11e + : "Ģ" # U122 + : "Ġ" # U120 + : ">" # U3e + : "Ğ" # U11e + : "Ğ" # U11e + : "Ḩ" # U1e28 + : "Ï" # Ucf + : "Í" # Ucd + : "Į" # U12e + : "Ī" # U12a + : "İ" # U130 + : "Į" # U12e + : "Î" # Uce + : "IJ" # U132 + : "Î" # Uce + : "Ī" # U12a + : "Ì" # Ucc + : "IJ" # U132 + : "Ĩ" # U128 + : "Ï" # Ucf + : "Í" # Ucd + : "J́" + : "J́" + : "Ķ" # U136 + : "Ĺ" # U139 + : "Ļ" # U13b + : "£" # Ua3 + : "Ł" # U141 + : "Ľ" # U13d + : "₤" # U20a4 + : "<" # U3c + : "|" # U7c + : "Ṁ" # U1e40 + : "Ń" # U143 + : "Ņ" # U145 + : "Ň" # U147 + : "₦" # U20a6 + : "Ŋ" # U14a + : "№" # U2116 + : "№" # U2116 + : "Ñ" # Ud1 + : "Ö" # Ud6 + : "Ó" # Ud3 + : "Ǫ" # U1ea + : "Ō" # U14c + : "Ø" # Ud8 + : "Ǫ" # U1ea + : "Ô" # Ud4 + : "Ⓐ" # U24b6 + : "©" # Ua9 + : "Œ" # U152 + : "®" # Uae + : "§" # Ua7 + : "¤" # Ua4 + : "Ô" # Ud4 + : "Ō" # U14c + : "Ò" # Ud2 + : "©" # Ua9 + : "®" # Uae + : "¤" # Ua4 + : "Õ" # Ud5 + : "Ö" # Ud6 + : "Ó" # Ud3 + : "¶" # Ub6 + : "Ṗ" # U1e56 + : "₽" # U20bd + : "¶" # Ub6 + : "₧" # U20a7 + : "Ŕ" # U154 + : "Ŗ" # U156 + : "Ř" # U158 + : "₹" # U20b9 + : "®" # Uae + : "®" # Uae + : "₨" # U20a8 + : "§" # Ua7 + : "Ś" # U15a + : "Ş" # U15e + : "Ṡ" # U1e60 + : "Ș" # U218 + : "Š" # U160 + : "℠" # U2120 + : "§" # Ua7 + : "ẞ" # U1e9e + : "℠" # U2120 + : "Ţ" # U162 + : "Ŧ" # U166 + : "Ṫ" # U1e6a + : "Ŧ" # U166 + : "Ț" # U21a + : "Ť" # U164 + : "Þ" # Ude + : "™" # U2122 + : "™" # U2122 + : "Ü" # Udc + : "Ú" # Uda + : "Ů" # U16e + : "Ų" # U172 + : "Ū" # U16a + : "Ų" # U172 + : "Û" # Udb + : "Ă" # U102 + : "Ĕ" # U114 + : "Ğ" # U11e + : "Ĭ" # U12c + : "Ŏ" # U14e + : "Ŭ" # U16c + : "Û" # Udb + : "Ū" # U16a + : "Ù" # Ud9 + : "ă" # U103 + : "ĕ" # U115 + : "ğ" # U11f + : "ĭ" # U12d + : "ŏ" # U14f + : "ŭ" # U16d + : "Ũ" # U168 + : "Ü" # Udc + : "Ú" # Uda + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "ӑ" # U4d1 + : "ӗ" # U4d7 + : "й" # U439 + : "ў" # U45e + : "ӂ" # U4c2 + : "Ӑ" # U4d0 + : "Ӗ" # U4d6 + : "Й" # U419 + : "Ў" # U40e + : "Ӂ" # U4c1 + : "Ᾰ" # U1fb8 + : "Ῐ" # U1fd8 + : "Ῠ" # U1fe8 + : "ᾰ" # U1fb0 + : "ῐ" # U1fd0 + : "ῠ" # U1fe0 + : "Ặ" # U1eb6 + : "ặ" # U1eb7 + : "|" # U7c + : "₩" # U20a9 + : "Ŵ" # U174 + : "¤" # Ua4 + : "¤" # Ua4 + : "Ÿ" # U178 + : "Ý" # Udd + : "¥" # Ua5 + : "¥" # Ua5 + : "Ŷ" # U176 + : "Ÿ" # U178 + : "Ý" # Udd + : "Ź" # U179 + : "Ż" # U17b + : "Ž" # U17d + : "⌷" # U2337 + : "⍀" # U2340 + : "⍂" # U2342 + : "⍉" # U2349 + : "⌷" # U2337 + : "^" # U5e + : "⁽" # U207d + : "⁾" # U207e + : "⁺" # U207a + : "¯" # Uaf + : "·" # Ub7 + : "|" # U7c + : "⁰" # U2070 + : "¹" # Ub9 + : "²" # Ub2 + : "³" # Ub3 + : "⁴" # U2074 + : "⁵" # U2075 + : "⁶" # U2076 + : "⁷" # U2077 + : "⁸" # U2078 + : "⁹" # U2079 + : "⁼" # U207c + : "Â" # Uc2 + : "Ĉ" # U108 + : "Ê" # Uca + : "Ĝ" # U11c + : "Ĥ" # U124 + : "Î" # Uce + : "Ĵ" # U134 + : "Ô" # Ud4 + : "Ŝ" # U15c + : "Û" # Udb + : "Ŵ" # U174 + : "Ŷ" # U176 + : "Ẑ" # U1e90 + : "â" # Ue2 + : "ĉ" # U109 + : "ê" # Uea + : "ĝ" # U11d + : "ĥ" # U125 + : "î" # Uee + : "ĵ" # U135 + : "ô" # Uf4 + : "ŝ" # U15d + : "û" # Ufb + : "ŵ" # U175 + : "ŷ" # U177 + : "ẑ" # U1e91 + : "↑" # U2191 + : "а̂" + : "е̂" + : "и̂" + : "о̂" + : "р̂" + : "у̂" + : "А̂" + : "Е̂" + : "И̂" + : "О̂" + : "Р̂" + : "У̂" + : "Ậ" # U1eac + : "ậ" # U1ead + : "Ệ" # U1ec6 + : "ệ" # U1ec7 + : "Ộ" # U1ed8 + : "ộ" # U1ed9 + : "⁻" # U207b + : "㆒" # U3192 + : "㆜" # U319c + : "㆔" # U3194 + : "㆖" # U3196 + : "㆘" # U3198 + : "㆛" # U319b + : "㆗" # U3197 + : "㆚" # U319a + : "㆓" # U3193 + : "㆟" # U319f + : "㆕" # U3195 + : "㆞" # U319e + : "㆝" # U319d + : "㆙" # U3199 + : "²" # Ub2 + : "⁺" # U207a + : "⁰" # U2070 + : "¹" # Ub9 + : "²" # Ub2 + : "³" # Ub3 + : "⁴" # U2074 + : "⁵" # U2075 + : "⁶" # U2076 + : "⁷" # U2077 + : "⁸" # U2078 + : "⁹" # U2079 + : "⁼" # U207c + : "⍘" # U2358 + : "₍" # U208d + : "₎" # U208e + : "₊" # U208a + : "₀" # U2080 + : "₁" # U2081 + : "₂" # U2082 + : "₃" # U2083 + : "₄" # U2084 + : "₅" # U2085 + : "₆" # U2086 + : "₇" # U2087 + : "₈" # U2088 + : "₉" # U2089 + : "≤" # U2264 + : "₌" # U208c + : "≥" # U2265 + : "Ā" # U100 + : "Ē" # U112 + : "Ḡ" # U1e20 + : "Ī" # U12a + : "Ō" # U14c + : "Ū" # U16a + : "Ȳ" # U232 + : "¯" # Uaf + : "¯" # Uaf + : "ā" # U101 + : "ē" # U113 + : "ḡ" # U1e21 + : "ī" # U12b + : "ō" # U14d + : "ū" # U16b + : "ȳ" # U233 + : "Ǟ" # U1de + : "Ǣ" # U1e2 + : "Ȭ" # U22c + : "Ȫ" # U22a + : "Ǖ" # U1d5 + : "ǟ" # U1df + : "ǣ" # U1e3 + : "ȭ" # U22d + : "ȫ" # U22b + : "ǖ" # U1d6 + : "Ǭ" # U1ec + : "ǭ" # U1ed + : "Ǡ" # U1e0 + : "ǡ" # U1e1 + : "Ȱ" # U230 + : "ȱ" # U231 + : "а̄" + : "е̄" + : "ӣ" # U4e3 + : "о̄" + : "р̄" + : "ӯ" # U4ef + : "А̄" + : "Е̄" + : "Ӣ" # U4e2 + : "О̄" + : "Р̄" + : "Ӯ" # U4ee + : "Ᾱ" # U1fb9 + : "Ῑ" # U1fd9 + : "Ῡ" # U1fe9 + : "ᾱ" # U1fb1 + : "ῑ" # U1fd1 + : "ῡ" # U1fe1 + : "Ḹ" # U1e38 + : "ḹ" # U1e39 + : "Ṝ" # U1e5c + : "ṝ" # U1e5d + : "⍙" # U2359 + : "⍷" # U2377 + : "₋" # U208b + : "⍛" # U235b + : "≢" # U2262 + : "⊆" # U2286 + : "⊇" # U2287 + : "⍊" # U234a + : "⍚" # U235a + : "⍸" # U2378 + : "⍹" # U2379 + : "⍶" # U2376 + : "⍜" # U235c + : "₂" # U2082 + : "₊" # U208a + : "₀" # U2080 + : "₁" # U2081 + : "₂" # U2082 + : "₃" # U2083 + : "₄" # U2084 + : "₅" # U2085 + : "₆" # U2086 + : "₇" # U2087 + : "₈" # U2088 + : "₉" # U2089 + : "₌" # U208c + : "`" # U60 + : "À" # Uc0 + : "È" # Uc8 + : "Ì" # Ucc + : "Ǹ" # U1f8 + : "Ò" # Ud2 + : "Ù" # Ud9 + : "Ẁ" # U1e80 + : "Ỳ" # U1ef2 + : "à" # Ue0 + : "è" # Ue8 + : "ì" # Uec + : "ǹ" # U1f9 + : "ò" # Uf2 + : "ù" # Uf9 + : "ẁ" # U1e81 + : "ỳ" # U1ef3 + : "Ầ" # U1ea6 + : "Ề" # U1ec0 + : "Ồ" # U1ed2 + : "Ǜ" # U1db + : "ầ" # U1ea7 + : "ề" # U1ec1 + : "ồ" # U1ed3 + : "ǜ" # U1dc + : "Ằ" # U1eb0 + : "ằ" # U1eb1 + : "Ḕ" # U1e14 + : "ḕ" # U1e15 + : "Ṑ" # U1e50 + : "ṑ" # U1e51 + : "а̀" + : "ѐ" # U450 + : "ѝ" # U45d + : "о̀" + : "р̀" + : "у̀" + : "А̀" + : "Ѐ" # U400 + : "Ѝ" # U40d + : "О̀" + : "Р̀" + : "У̀" + : "ῒ" # U1fd2 + : "ῢ" # U1fe2 + : "Ὰ" # U1fba + : "Ὲ" # U1fc8 + : "Ὴ" # U1fca + : "Ὶ" # U1fda + : "Ὸ" # U1ff8 + : "Ὺ" # U1fea + : "Ὼ" # U1ffa + : "ὰ" # U1f70 + : "ὲ" # U1f72 + : "ὴ" # U1f74 + : "ὶ" # U1f76 + : "ὸ" # U1f78 + : "ὺ" # U1f7a + : "ὼ" # U1f7c + : "ἂ" # U1f02 + : "ἃ" # U1f03 + : "Ἂ" # U1f0a + : "Ἃ" # U1f0b + : "ἒ" # U1f12 + : "ἓ" # U1f13 + : "Ἒ" # U1f1a + : "Ἓ" # U1f1b + : "ἢ" # U1f22 + : "ἣ" # U1f23 + : "Ἢ" # U1f2a + : "Ἣ" # U1f2b + : "ἲ" # U1f32 + : "ἳ" # U1f33 + : "Ἲ" # U1f3a + : "Ἳ" # U1f3b + : "ὂ" # U1f42 + : "ὃ" # U1f43 + : "Ὂ" # U1f4a + : "Ὃ" # U1f4b + : "ὒ" # U1f52 + : "ὓ" # U1f53 + : "Ὓ" # U1f5b + : "ὢ" # U1f62 + : "ὣ" # U1f63 + : "Ὢ" # U1f6a + : "Ὣ" # U1f6b + : "ä" # Ue4 + : "á" # Ue1 + : "ă" # U103 + : "å" # Ue5 + : "ą" # U105 + : "ā" # U101 + : "ą" # U105 + : "â" # Ue2 + : "â" # Ue2 + : "ā" # U101 + : "à" # Ue0 + : "å" # Ue5 + : "æ" # Ue6 + : "ã" # Ue3 + : "ä" # Ue4 + : "á" # Ue1 + : "ḃ" # U1e03 + : "Ă" # U102 + : "Ĕ" # U114 + : "Ğ" # U11e + : "Ĭ" # U12c + : "Ŏ" # U14e + : "Ŭ" # U16c + : "ă" # U103 + : "ĕ" # U115 + : "ğ" # U11f + : "ĭ" # U12d + : "ŏ" # U14f + : "ŭ" # U16d + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "ӑ" # U4d1 + : "ӗ" # U4d7 + : "й" # U439 + : "ў" # U45e + : "ӂ" # U4c2 + : "Ӑ" # U4d0 + : "Ӗ" # U4d6 + : "Й" # U419 + : "Ў" # U40e + : "Ӂ" # U4c1 + : "Ᾰ" # U1fb8 + : "Ῐ" # U1fd8 + : "Ῠ" # U1fe8 + : "ᾰ" # U1fb0 + : "ῐ" # U1fd0 + : "ῠ" # U1fe0 + : "Ặ" # U1eb6 + : "ặ" # U1eb7 + : "ć" # U107 + : "ç" # Ue7 + : "ċ" # U10b + : "¢" # Ua2 + : "č" # U10d + : "€" # U20ac + : "Ǎ" # U1cd + : "Č" # U10c + : "Ď" # U10e + : "Ě" # U11a + : "Ǧ" # U1e6 + : "Ȟ" # U21e + : "Ǐ" # U1cf + : "Ǩ" # U1e8 + : "Ľ" # U13d + : "Ň" # U147 + : "Ǒ" # U1d1 + : "Ř" # U158 + : "Š" # U160 + : "Ť" # U164 + : "Ǔ" # U1d3 + : "Ž" # U17d + : "ǎ" # U1ce + : "č" # U10d + : "ď" # U10f + : "ě" # U11b + : "ǧ" # U1e7 + : "ȟ" # U21f + : "ǐ" # U1d0 + : "ǰ" # U1f0 + : "ǩ" # U1e9 + : "ľ" # U13e + : "ň" # U148 + : "ǒ" # U1d2 + : "ř" # U159 + : "š" # U161 + : "ť" # U165 + : "ǔ" # U1d4 + : "ž" # U17e + : "¢" # Ua2 + : "Ǚ" # U1d9 + : "ǚ" # U1da + : "ḑ" # U1e11 + : "đ" # U111 + : "ḋ" # U1e0b + : "ď" # U10f + : "₫" # U20ab + : "ð" # Uf0 + : "⌀" # U2300 + : "ë" # Ueb + : "é" # Ue9 + : "ę" # U119 + : "ē" # U113 + : "ė" # U117 + : "ę" # U119 + : "ě" # U11b + : "€" # U20ac + : "ê" # Uea + : "ê" # Uea + : "ē" # U113 + : "è" # Ue8 + : "ə" # U259 + : "ë" # Ueb + : "é" # Ue9 + : "ḟ" # U1e1f + : "ſ" # U17f + : "ff" # Ufb00 + : "fi" # Ufb01 + : "fl" # Ufb02 + : "ſ" # U17f + : "ğ" # U11f + : "ģ" # U123 + : "ġ" # U121 + : "ğ" # U11f + : ">" # U3e + : "ğ" # U11f + : "ḩ" # U1e29 + : "ï" # Uef + : "í" # Ued + : "į" # U12f + : "ī" # U12b + : "ı" # U131 + : "į" # U12f + : "î" # Uee + : "î" # Uee + : "ī" # U12b + : "ì" # Uec + : "ij" # U133 + : "ĩ" # U129 + : "ï" # Uef + : "í" # Ued + : "j́" + : "j́" + : "ķ" # U137 + : "ĸ" # U138 + : "ĺ" # U13a + : "ļ" # U13c + : "£" # Ua3 + : "ł" # U142 + : "ľ" # U13e + : "<" # U3c + : "|" # U7c + : "ṁ" # U1e41 + : "₥" # U20a5 + : "µ" # Ub5 + : "ń" # U144 + : "ņ" # U146 + : "ň" # U148 + : "ŋ" # U14b + : "ñ" # Uf1 + : "ö" # Uf6 + : "ó" # Uf3 + : "ǫ" # U1eb + : "ō" # U14d + : "ø" # Uf8 + : "ǫ" # U1eb + : "ô" # Uf4 + : "Å" # Uc5 + : "©" # Ua9 + : "®" # Uae + : "Ů" # U16e + : "¤" # Ua4 + : "ô" # Uf4 + : "ō" # U14d + : "ò" # Uf2 + : "å" # Ue5 + : "©" # Ua9 + : "œ" # U153 + : "°" # Ub0 + : "®" # Uae + : "§" # Ua7 + : "ů" # U16f + : "ẘ" # U1e98 + : "¤" # Ua4 + : "ẙ" # U1e99 + : "õ" # Uf5 + : "ö" # Uf6 + : "ó" # Uf3 + : "¶" # Ub6 + : "ṗ" # U1e57 + : "₽" # U20bd + : "ŕ" # U155 + : "ŗ" # U157 + : "ř" # U159 + : "₹" # U20b9 + : "§" # Ua7 + : "ś" # U15b + : "ş" # U15f + : "ṡ" # U1e61 + : "ș" # U219 + : "š" # U161 + : "℠" # U2120 + : "℠" # U2120 + : "§" # Ua7 + : "ß" # Udf + : "ş" # U15f + : "ţ" # U163 + : "ŧ" # U167 + : "ṫ" # U1e6b + : "ŧ" # U167 + : "ț" # U21b + : "ť" # U165 + : "™" # U2122 + : "þ" # Ufe + : "™" # U2122 + : "ü" # Ufc + : "ú" # Ufa + : "ů" # U16f + : "ų" # U173 + : "ū" # U16b + : "µ" # Ub5 + : "ų" # U173 + : "û" # Ufb + : "Ă" # U102 + : "Ŭ" # U16c + : "û" # Ufb + : "ū" # U16b + : "ù" # Uf9 + : "ă" # U103 + : "ŭ" # U16d + : "ũ" # U169 + : "ü" # Ufc + : "ú" # Ufa + : "√" # U221a + : "Ǎ" # U1cd + : "Č" # U10c + : "Ď" # U10e + : "Ě" # U11a + : "Ǧ" # U1e6 + : "Ȟ" # U21e + : "Ǐ" # U1cf + : "Ǩ" # U1e8 + : "Ň" # U147 + : "Ǒ" # U1d1 + : "Ř" # U158 + : "Š" # U160 + : "Ť" # U164 + : "Ǔ" # U1d3 + : "Ž" # U17d + : "ǎ" # U1ce + : "č" # U10d + : "ď" # U10f + : "ě" # U11b + : "ǧ" # U1e7 + : "ȟ" # U21f + : "ǐ" # U1d0 + : "ǰ" # U1f0 + : "ǩ" # U1e9 + : "|" # U7c + : "ň" # U148 + : "ǒ" # U1d2 + : "ř" # U159 + : "š" # U161 + : "ť" # U165 + : "ǔ" # U1d4 + : "ž" # U17e + : "↓" # U2193 + : "ŵ" # U175 + : "¤" # Ua4 + : "¤" # Ua4 + : "×" # Ud7 + : "ÿ" # Uff + : "ý" # Ufd + : "¥" # Ua5 + : "¥" # Ua5 + : "ŷ" # U177 + : "ÿ" # Uff + : "ý" # Ufd + : "ź" # U17a + : "ż" # U17c + : "ž" # U17e + : "∅" # U2205 + : "¢" # Ua2 + : "↑" # U2191 + : "¢" # Ua2 + : "↓" # U2193 + : "⍭" # U236d + : "⍅" # U2345 + : "⍆" # U2346 + : "⍋" # U234b + : "⍒" # U2352 + : "⍦" # U2366 + : "⍧" # U2367 + : "⌽" # U233d + : "~" # U7e + : "⍬" # U236c + : "Ã" # Uc3 + : "Ẽ" # U1ebc + : "Ĩ" # U128 + : "Ñ" # Ud1 + : "Õ" # Ud5 + : "Ũ" # U168 + : "Ṽ" # U1e7c + : "Ỹ" # U1ef8 + : "ã" # Ue3 + : "ẽ" # U1ebd + : "ĩ" # U129 + : "ñ" # Uf1 + : "õ" # Uf5 + : "ũ" # U169 + : "ṽ" # U1e7d + : "ỹ" # U1ef9 + : "⍭" # U236d + : "≈" # U2248 + : "⍨" # U2368 + : "Ẫ" # U1eaa + : "Ễ" # U1ec4 + : "Ỗ" # U1ed6 + : "ẫ" # U1eab + : "ễ" # U1ec5 + : "ỗ" # U1ed7 + : "Ẵ" # U1eb4 + : "ẵ" # U1eb5 + : "ῗ" # U1fd7 + : "ῧ" # U1fe7 + : "ᾶ" # U1fb6 + : "ῆ" # U1fc6 + : "ῖ" # U1fd6 + : "ῦ" # U1fe6 + : "ῶ" # U1ff6 + : "ἆ" # U1f06 + : "ἇ" # U1f07 + : "Ἆ" # U1f0e + : "Ἇ" # U1f0f + : "ἦ" # U1f26 + : "ἧ" # U1f27 + : "Ἦ" # U1f2e + : "Ἧ" # U1f2f + : "ἶ" # U1f36 + : "ἷ" # U1f37 + : "Ἶ" # U1f3e + : "Ἷ" # U1f3f + : "ὖ" # U1f56 + : "ὗ" # U1f57 + : "Ὗ" # U1f5f + : "ὦ" # U1f66 + : "ὧ" # U1f67 + : "Ὦ" # U1f6e + : "Ὧ" # U1f6f + : "⍫" # U236b + : "⍲" # U2372 + : "⍱" # U2371 + : "΅" # U385 + : "⍣" # U2363 + : "⍩" # U2369 + : "Ä" # Uc4 + : "Ë" # Ucb + : "Ï" # Ucf + : "Ö" # Ud6 + : "Ü" # Udc + : "Ÿ" # U178 + : "῭" # U1fed + : "ä" # Ue4 + : "ë" # Ueb + : "ï" # Uef + : "ö" # Uf6 + : "ü" # Ufc + : "ÿ" # Uff + : "῁" # U1fc1 + : "΅" # U385 + : "⍢" # U2362 + : "⍤" # U2364 + : "⍡" # U2361 + : "⍥" # U2365 + : "῭" # U1fed + : "΅" # U385 + : "῁" # U1fc1 + : "Ā" # U100 + : "Ē" # U112 + : "Ḡ" # U1e20 + : "Ī" # U12a + : "Ō" # U14c + : "Ū" # U16a + : "Ȳ" # U232 + : "ā" # U101 + : "ē" # U113 + : "ḡ" # U1e21 + : "ī" # U12b + : "ō" # U14d + : "ū" # U16b + : "ȳ" # U233 + : "Ǟ" # U1de + : "Ǣ" # U1e2 + : "Ȭ" # U22c + : "Ȫ" # U22a + : "Ǖ" # U1d5 + : "ǟ" # U1df + : "ǣ" # U1e3 + : "ȭ" # U22d + : "ȫ" # U22b + : "ǖ" # U1d6 + : "Ǭ" # U1ec + : "ǭ" # U1ed + : "Ǡ" # U1e0 + : "ǡ" # U1e1 + : "Ȱ" # U230 + : "ȱ" # U231 + : "а̄" + : "е̄" + : "ӣ" # U4e3 + : "о̄" + : "р̄" + : "ӯ" # U4ef + : "А̄" + : "Е̄" + : "Ӣ" # U4e2 + : "О̄" + : "Р̄" + : "Ӯ" # U4ee + : "Ᾱ" # U1fb9 + : "Ῑ" # U1fd9 + : "Ῡ" # U1fe9 + : "ᾱ" # U1fb1 + : "ῑ" # U1fd1 + : "ῡ" # U1fe1 + : "Ḹ" # U1e38 + : "ḹ" # U1e39 + : "Ṝ" # U1e5c + : "ṝ" # U1e5d + : "⍑" # U2351 + : "Á" # Uc1 + : "Ć" # U106 + : "É" # Uc9 + : "Ǵ" # U1f4 + : "Í" # Ucd + : "J́" + : "Ḱ" # U1e30 + : "Ĺ" # U139 + : "Ḿ" # U1e3e + : "Ń" # U143 + : "Ó" # Ud3 + : "Ṕ" # U1e54 + : "Ŕ" # U154 + : "Ś" # U15a + : "Ú" # Uda + : "Ẃ" # U1e82 + : "Ý" # Udd + : "Ź" # U179 + : "á" # Ue1 + : "ć" # U107 + : "é" # Ue9 + : "ǵ" # U1f5 + : "í" # Ued + : "j́" + : "ḱ" # U1e31 + : "ĺ" # U13a + : "ḿ" # U1e3f + : "ń" # U144 + : "ó" # Uf3 + : "ṕ" # U1e55 + : "ŕ" # U155 + : "ś" # U15b + : "ú" # Ufa + : "ẃ" # U1e83 + : "ý" # Ufd + : "ź" # U17a + : "Ấ" # U1ea4 + : "Ǻ" # U1fa + : "Ǽ" # U1fc + : "Ḉ" # U1e08 + : "Ế" # U1ebe + : "Ḯ" # U1e2e + : "Ố" # U1ed0 + : "Ṍ" # U1e4c + : "Ǿ" # U1fe + : "Ǘ" # U1d7 + : "ấ" # U1ea5 + : "ǻ" # U1fb + : "ǽ" # U1fd + : "ḉ" # U1e09 + : "ế" # U1ebf + : "ḯ" # U1e2f + : "ố" # U1ed1 + : "ṍ" # U1e4d + : "ǿ" # U1ff + : "ǘ" # U1d8 + : "Ắ" # U1eae + : "ắ" # U1eaf + : "Ḗ" # U1e16 + : "ḗ" # U1e17 + : "Ṓ" # U1e52 + : "Ṹ" # U1e78 + : "ṓ" # U1e53 + : "ṹ" # U1e79 + : "ю́" + : "а́" + : "е́" + : "ѓ" # U453 + : "и́" + : "ќ" # U45c + : "о́" + : "я́" + : "р́" + : "у́" + : "ы́" + : "э́" + : "Ю́́" + : "А́" + : "Е́" + : "Ѓ" # U403 + : "И́" + : "Ќ" # U40c + : "О́" + : "Я́" + : "Р́" + : "У́" + : "Ы́" + : "Э́" + : "ΐ" # U390 + : "ΰ" # U3b0 + : "Ά" # U386 + : "Έ" # U388 + : "Ή" # U389 + : "Ί" # U38a + : "Ό" # U38c + : "Ύ" # U38e + : "Ώ" # U38f + : "ά" # U3ac + : "έ" # U3ad + : "ή" # U3ae + : "ί" # U3af + : "ό" # U3cc + : "ύ" # U3cd + : "ώ" # U3ce + : "ἄ" # U1f04 + : "ἅ" # U1f05 + : "Ἄ" # U1f0c + : "Ἅ" # U1f0d + : "ἔ" # U1f14 + : "ἕ" # U1f15 + : "Ἔ" # U1f1c + : "Ἕ" # U1f1d + : "ἤ" # U1f24 + : "ἥ" # U1f25 + : "Ἤ" # U1f2c + : "Ἥ" # U1f2d + : "ἴ" # U1f34 + : "ἵ" # U1f35 + : "Ἴ" # U1f3c + : "Ἵ" # U1f3d + : "ὄ" # U1f44 + : "ὅ" # U1f45 + : "Ὄ" # U1f4c + : "Ὅ" # U1f4d + : "ὔ" # U1f54 + : "ὕ" # U1f55 + : "Ὕ" # U1f5d + : "ὤ" # U1f64 + : "ὥ" # U1f65 + : "Ὤ" # U1f6c + : "Ὥ" # U1f6d + : "Ç" # Uc7 + : "Ḑ" # U1e10 + : "Ȩ" # U228 + : "Ģ" # U122 + : "Ḩ" # U1e28 + : "Ķ" # U136 + : "Ļ" # U13b + : "Ņ" # U145 + : "Ŗ" # U156 + : "Ş" # U15e + : "Ţ" # U162 + : "ç" # Ue7 + : "ḑ" # U1e11 + : "ȩ" # U229 + : "ģ" # U123 + : "ḩ" # U1e29 + : "ķ" # U137 + : "ļ" # U13c + : "ņ" # U146 + : "ŗ" # U157 + : "ş" # U15f + : "ţ" # U163 + : "⌹" # U2339 + : "Ğ" # U11e + : "ğ" # U11f + : "יִ" # Ufb1d + : "ײַ" # Ufb1f + : "אַ" # Ufb2e + : "אָ" # Ufb2f + : "וֹ" # Ufb4b + : "אּ" # Ufb30 + : "בּ" # Ufb31 + : "גּ" # Ufb32 + : "דּ" # Ufb33 + : "הּ" # Ufb34 + : "וּ" # Ufb35 + : "זּ" # Ufb36 + : "טּ" # Ufb38 + : "יּ" # Ufb39 + : "ךּ" # Ufb3a + : "כּ" # Ufb3b + : "לּ" # Ufb3c + : "מּ" # Ufb3e + : "נּ" # Ufb40 + : "סּ" # Ufb41 + : "ףּ" # Ufb43 + : "פּ" # Ufb44 + : "צּ" # Ufb46 + : "קּ" # Ufb47 + : "רּ" # Ufb48 + : "שּ" # Ufb49 + : "תּ" # Ufb4a + : "בֿ" # Ufb4c + : "כֿ" # Ufb4d + : "פֿ" # Ufb4e + : "שׁ" # Ufb2a + : "שּׁ" # Ufb2c + : "שׂ" # Ufb2b + : "שּׂ" # Ufb2d + : "آ" # U622 + : "أ" # U623 + : "ؤ" # U624 + : "ئ" # U626 + : "ۂ" # U6c2 + : "ۓ" # U6d3 + : "ۀ" # U6c0 + : "إ" # U625 + : "§" # Ua7 + : "₽" # U20bd + : "€" # U20ac + : "№" # U2116 + : "№" # U2116 + : "€" # U20ac + : "₽" # U20bd + : "Ά" # U386 + : "Έ" # U388 + : "Ή" # U389 + : "Ϊ" # U3aa + : "Ί" # U38a + : "Ό" # U38c + : "Ϋ" # U3ab + : "Ύ" # U38e + : "Ώ" # U38f + : "ά" # U3ac + : "έ" # U3ad + : "ή" # U3ae + : "ϊ" # U3ca + : "ᾴ" # U1fb4 + : "ῄ" # U1fc4 + : "ῴ" # U1ff4 + : "ᾼ" # U1fbc + : "ῌ" # U1fcc + : "ῼ" # U1ffc + : "ᾳ" # U1fb3 + : "ῃ" # U1fc3 + : "ῳ" # U1ff3 + : "ᾀ" # U1f80 + : "ᾁ" # U1f81 + : "ᾂ" # U1f82 + : "ᾃ" # U1f83 + : "ᾄ" # U1f84 + : "ᾅ" # U1f85 + : "ᾆ" # U1f86 + : "ᾇ" # U1f87 + : "ᾈ" # U1f88 + : "ᾉ" # U1f89 + : "ᾊ" # U1f8a + : "ᾋ" # U1f8b + : "ᾌ" # U1f8c + : "ᾍ" # U1f8d + : "ᾎ" # U1f8e + : "ᾏ" # U1f8f + : "ᾐ" # U1f90 + : "ᾑ" # U1f91 + : "ᾒ" # U1f92 + : "ᾓ" # U1f93 + : "ᾔ" # U1f94 + : "ᾕ" # U1f95 + : "ᾖ" # U1f96 + : "ᾗ" # U1f97 + : "ᾘ" # U1f98 + : "ᾙ" # U1f99 + : "ᾚ" # U1f9a + : "ᾛ" # U1f9b + : "ᾜ" # U1f9c + : "ᾝ" # U1f9d + : "ᾞ" # U1f9e + : "ᾟ" # U1f9f + : "ᾠ" # U1fa0 + : "ᾡ" # U1fa1 + : "ᾢ" # U1fa2 + : "ᾣ" # U1fa3 + : "ᾤ" # U1fa4 + : "ᾥ" # U1fa5 + : "ᾦ" # U1fa6 + : "ᾧ" # U1fa7 + : "ᾨ" # U1fa8 + : "ᾩ" # U1fa9 + : "ᾪ" # U1faa + : "ᾫ" # U1fab + : "ᾬ" # U1fac + : "ᾭ" # U1fad + : "ᾮ" # U1fae + : "ᾯ" # U1faf + : "ᾲ" # U1fb2 + : "ῂ" # U1fc2 + : "ῲ" # U1ff2 + : "ᾷ" # U1fb7 + : "ῇ" # U1fc7 + : "ῷ" # U1ff7 + : "ό" # U3cc + : "ϋ" # U3cb + : "ύ" # U3cd + : "ώ" # U3ce + : "≰" # U2270 + : "≱" # U2271 + : "≇" # U2247 + : "≢" # U2262 + : "⊄" # U2284 + : "⊅" # U2285 + : "क़" # U958 + : "ख़" # U959 + : "ग़" # U95a + : "ज़" # U95b + : "ड़" # U95c + : "ढ़" # U95d + : "ऩ" # U929 + : "फ़" # U95e + : "य़" # U95f + : "ऱ" # U931 + : "ऴ" # U934 + : "ড়" # U9dc + : "ঢ়" # U9dd + : "য়" # U9df + : "ো" # U9cb + : "ৌ" # U9cc + : "ਖ਼" # Ua59 + : "ਗ਼" # Ua5a + : "ਜ਼" # Ua5b + : "ਫ਼" # Ua5e + : "ਲ਼" # Ua33 + : "ਸ਼" # Ua36 + : "ଡ଼" # Ub5c + : "ଢ଼" # Ub5d + : "ୋ" # Ub4b + : "ୈ" # Ub48 + : "ୌ" # Ub4c + : "≮" # U226e + : "≯" # U226f + : "₍" # U208d + : "₎" # U208e + : "₊" # U208a + : "₀" # U2080 + : "₁" # U2081 + : "₂" # U2082 + : "₃" # U2083 + : "₄" # U2084 + : "₅" # U2085 + : "₆" # U2086 + : "₇" # U2087 + : "₈" # U2088 + : "₉" # U2089 + : "₌" # U208c + : "ொ" # Ubca + : "ௌ" # Ubcc + : "₋" # U208b + : "₂" # U2082 + : "₊" # U208a + : "₀" # U2080 + : "₁" # U2081 + : "₂" # U2082 + : "₃" # U2083 + : "₄" # U2084 + : "₅" # U2085 + : "₆" # U2086 + : "₇" # U2087 + : "₈" # U2088 + : "₉" # U2089 + : "₌" # U208c + : "ோ" # Ubcb + : "ஔ" # Ub94 + : "⊅" # U2285 + : "⊄" # U2284 + : "⊬" # U22ac + : "ై" # Uc48 + : "ೀ" # Ucc0 + : "ೊ" # Ucca + : "ೇ" # Ucc7 + : "ೈ" # Ucc8 + : "ೋ" # Uccb + : "ൊ" # Ud4a + : "ൌ" # Ud4c + : "ോ" # Ud4b + : "ේ" # Udda + : "ො" # Uddc + : "ෞ" # Udde + : "ෝ" # Uddd + : "ཱི" # Uf73 + : "ཱུ" # Uf75 + : "ཱྀ" # Uf81 + : "ྐྵ" # Ufb9 + : "ྒྷ" # Uf93 + : "ྜྷ" # Uf9d + : "ྡྷ" # Ufa2 + : "ྦྷ" # Ufa7 + : "ྫྷ" # Ufac + : "ྲྀ" # Uf76 + : "ླྀ" # Uf78 + : "ཀྵ" # Uf69 + : "གྷ" # Uf43 + : "ཌྷ" # Uf4d + : "དྷ" # Uf52 + : "བྷ" # Uf57 + : "ཛྷ" # Uf5c + : "ဦ" # U1026 + : "ᄁ" # U1101 + : "ᄓ" # U1113 + : "ᄔ" # U1114 + : "ᄕ" # U1115 + : "ᄖ" # U1116 + : "ᄗ" # U1117 + : "ᄄ" # U1104 + : "ᄘ" # U1118 + : "ᄙ" # U1119 + : "ᄛ" # U111b + : "ᄚ" # U111a + : "ᄜ" # U111c + : "ᄝ" # U111d + : "ᄞ" # U111e + : "ᄟ" # U111f + : "ᄠ" # U1120 + : "ᄈ" # U1108 + : "ᄡ" # U1121 + : "ᄥ" # U1125 + : "ᄫ" # U112b + : "ᄧ" # U1127 + : "ᄨ" # U1128 + : "ᄩ" # U1129 + : "ᄪ" # U112a + : "ᄬ" # U112c + : "ᄢ" # U1122 + : "ᄣ" # U1123 + : "ᄤ" # U1124 + : "ᄦ" # U1126 + : "ᄬ" # U112c + : "ᄭ" # U112d + : "ᄮ" # U112e + : "ᄯ" # U112f + : "ᄰ" # U1130 + : "ᄱ" # U1131 + : "ᄲ" # U1132 + : "ᄊ" # U110a + : "ᄴ" # U1134 + : "ᄵ" # U1135 + : "ᄶ" # U1136 + : "ᄷ" # U1137 + : "ᄸ" # U1138 + : "ᄹ" # U1139 + : "ᄺ" # U113a + : "ᄻ" # U113b + : "ᄳ" # U1133 + : "ᄴ" # U1134 + : "ᅁ" # U1141 + : "ᅂ" # U1142 + : "ᅃ" # U1143 + : "ᅄ" # U1144 + : "ᅅ" # U1145 + : "ᅇ" # U1147 + : "ᅈ" # U1148 + : "ᅉ" # U1149 + : "ᅊ" # U114a + : "ᅋ" # U114b + : "ᅆ" # U1146 + : "ᅍ" # U114d + : "ᄍ" # U110d + : "ᅒ" # U1152 + : "ᅓ" # U1153 + : "ᅖ" # U1156 + : "ᅗ" # U1157 + : "ᅘ" # U1158 + : "ᄢ" # U1122 + : "ᄣ" # U1123 + : "ᄤ" # U1124 + : "ᄥ" # U1125 + : "ᄦ" # U1126 + : "ᄳ" # U1133 + : "ᄽ" # U113d + : "ᄿ" # U113f + : "ᅏ" # U114f + : "ᅑ" # U1151 + : "ᅶ" # U1176 + : "ᅷ" # U1177 + : "ᅢ" # U1162 + : "ᅸ" # U1178 + : "ᅹ" # U1179 + : "ᅤ" # U1164 + : "ᅺ" # U117a + : "ᅻ" # U117b + : "ᅼ" # U117c + : "ᅦ" # U1166 + : "ᅽ" # U117d + : "ᅾ" # U117e + : "ᅨ" # U1168 + : "ᅪ" # U116a + : "ᅫ" # U116b + : "ᅿ" # U117f + : "ᆀ" # U1180 + : "ᆁ" # U1181 + : "ᆂ" # U1182 + : "ᆃ" # U1183 + : "ᅬ" # U116c + : "ᅫ" # U116b + : "ᆄ" # U1184 + : "ᆅ" # U1185 + : "ᆆ" # U1186 + : "ᆇ" # U1187 + : "ᆈ" # U1188 + : "ᆉ" # U1189 + : "ᆊ" # U118a + : "ᅯ" # U116f + : "ᅰ" # U1170 + : "ᆌ" # U118c + : "ᆍ" # U118d + : "ᅱ" # U1171 + : "ᆋ" # U118b + : "ᆋ" # U118b + : "ᅰ" # U1170 + : "ᆎ" # U118e + : "ᆏ" # U118f + : "ᆐ" # U1190 + : "ᆑ" # U1191 + : "ᆒ" # U1192 + : "ᆓ" # U1193 + : "ᆔ" # U1194 + : "ᆕ" # U1195 + : "ᆖ" # U1196 + : "ᅴ" # U1174 + : "ᆗ" # U1197 + : "ᆘ" # U1198 + : "ᆙ" # U1199 + : "ᆚ" # U119a + : "ᆛ" # U119b + : "ᆜ" # U119c + : "ᆝ" # U119d + : "ᆟ" # U119f + : "ᆠ" # U11a0 + : "ᆡ" # U11a1 + : "ᆢ" # U11a2 + : "ᆩ" # U11a9 + : "ᇃ" # U11c3 + : "ᆪ" # U11aa + : "ᇄ" # U11c4 + : "ᇄ" # U11c4 + : "ᇅ" # U11c5 + : "ᇆ" # U11c6 + : "ᇇ" # U11c7 + : "ᆬ" # U11ac + : "ᇉ" # U11c9 + : "ᆭ" # U11ad + : "ᇈ" # U11c8 + : "ᇊ" # U11ca + : "ᇋ" # U11cb + : "ᆰ" # U11b0 + : "ᇌ" # U11cc + : "ᇍ" # U11cd + : "ᇎ" # U11ce + : "ᇐ" # U11d0 + : "ᆱ" # U11b1 + : "ᆲ" # U11b2 + : "ᇓ" # U11d3 + : "ᆳ" # U11b3 + : "ᇖ" # U11d6 + : "ᇘ" # U11d8 + : "ᆴ" # U11b4 + : "ᆵ" # U11b5 + : "ᆶ" # U11b6 + : "ᇑ" # U11d1 + : "ᇒ" # U11d2 + : "ᇔ" # U11d4 + : "ᇕ" # U11d5 + : "ᇗ" # U11d7 + : "ᇙ" # U11d9 + : "ᇌ" # U11cc + : "ᇑ" # U11d1 + : "ᇒ" # U11d2 + : "ᇓ" # U11d3 + : "ᇕ" # U11d5 + : "ᇔ" # U11d4 + : "ᇖ" # U11d6 + : "ᇚ" # U11da + : "ᇛ" # U11db + : "ᇜ" # U11dc + : "ᇝ" # U11dd + : "ᇞ" # U11de + : "ᇢ" # U11e2 + : "ᇠ" # U11e0 + : "ᇡ" # U11e1 + : "ᇟ" # U11df + : "ᇣ" # U11e3 + : "ᆹ" # U11b9 + : "ᇦ" # U11e6 + : "ᇤ" # U11e4 + : "ᇥ" # U11e5 + : "ᇧ" # U11e7 + : "ᇨ" # U11e8 + : "ᇩ" # U11e9 + : "ᇪ" # U11ea + : "ᆻ" # U11bb + : "ᇬ" # U11ec + : "ᇭ" # U11ed + : "ᇮ" # U11ee + : "ᇯ" # U11ef + : "ᇳ" # U11f3 + : "ᇴ" # U11f4 + : "ᇵ" # U11f5 + : "ᇶ" # U11f6 + : "ᇷ" # U11f7 + : "ᇸ" # U11f8 + : "ᇏ" # U11cf + : "ᇞ" # U11de + : "ᇭ" # U11ed + : "ᇱ" # U11f1 + : "ᇲ" # U11f2 + : "῎" # U1fce + : "῍" # U1fcd + : "῏" # U1fcf + : "῎" # U1fce + : "῍" # U1fcd + : "῎" # U1fce + : "῏" # U1fcf + : "῞" # U1fde + : "῝" # U1fdd + : "῟" # U1fdf + : "῞" # U1fde + : "῝" # U1fdd + : "῞" # U1fde + : "῟" # U1fdf + : "⍅" # U2345 + : "⍇" # U2347 + : "⍏" # U234f + : "⍐" # U2350 + : "⍆" # U2346 + : "⍈" # U2348 + : "⍖" # U2356 + : "⍗" # U2357 + : "∄" # U2204 + : "⍙" # U2359 + : "⍋" # U234b + : "⍍" # U234d + : "⍒" # U2352 + : "⍫" # U236b + : "⍢" # U2362 + : "⍔" # U2354 + : "∉" # U2209 + : "⍷" # U2377 + : "∌" # U220c + : "⍛" # U235b + : "⍤" # U2364 + : "⍝" # U235d + : "⍕" # U2355 + : "⍎" # U234e + : "⌻" # U233b + : "⌾" # U233e + : "∤" # U2224 + : "∦" # U2226 + : "⍲" # U2372 + : "⋄" # U22c4 + : "⍓" # U2353 + : "⍱" # U2371 + : "⋄" # U22c4 + : "⍌" # U234c + : "⍝" # U235d + : "⍦" # U2366 + : "≁" # U2241 + : "≄" # U2244 + : "≉" # U2249 + : "≭" # U226d + : "≢" # U2262 + : "⍯" # U236f + : "≴" # U2274 + : "≵" # U2275 + : "≸" # U2278 + : "≹" # U2279 + : "⊀" # U2280 + : "⊁" # U2281 + : "⋠" # U22e0 + : "⋡" # U22e1 + : "⊆" # U2286 + : "⍧" # U2367 + : "⊇" # U2287 + : "⊈" # U2288 + : "⊉" # U2289 + : "⋢" # U22e2 + : "⋣" # U22e3 + : "⍡" # U2361 + : "⍑" # U2351 + : "⍕" # U2355 + : "⌶" # U2336 + : "⍊" # U234a + : "⍎" # U234e + : "⌶" # U2336 + : "⊭" # U22ad + : "⊮" # U22ae + : "⊯" # U22af + : "⋪" # U22ea + : "⋫" # U22eb + : "⋬" # U22ec + : "⋭" # U22ed + : "⍚" # U235a + : "⌺" # U233a + : "⍸" # U2378 + : "⍹" # U2379 + : "⍶" # U2376 + : "⍞" # U235e + : "⍁" # U2341 + : "⍠" # U2360 + : "⍃" # U2343 + : "⌸" # U2338 + : "⍄" # U2344 + : "⍰" # U2370 + : "⍂" # U2342 + : "⌹" # U2339 + : "⍇" # U2347 + : "⍐" # U2350 + : "⍈" # U2348 + : "⍗" # U2357 + : "⍍" # U234d + : "⍔" # U2354 + : "⌻" # U233b + : "⍓" # U2353 + : "⍌" # U234c + : "⍯" # U236f + : "⌺" # U233a + : "⌼" # U233c + : "⍟" # U235f + : "⊖" # U2296 + : "⊙" # U2299 + : "⍉" # U2349 + : "⍜" # U235c + : "⌽" # U233d + : "⍥" # U2365 + : "⌾" # U233e + : "⌼" # U233c + : "⫝̸" # U2adc + : "Đ" # U110 + : "Ǥ" # U1e4 + : "Ħ" # U126 + : "Ɨ" # U197 + : "Ł" # U141 + : "Ø" # Ud8 + : "Ŧ" # U166 + : "Ƶ" # U1b5 + : "ƀ" # U180 + : "đ" # U111 + : "ǥ" # U1e5 + : "ħ" # U127 + : "ɨ" # U268 + : "ł" # U142 + : "ø" # Uf8 + : "ŧ" # U167 + : "ƶ" # U1b6 + : "ʡ" # U2a1 + : "Ұ" # U4b0 + : "ұ" # U4b1 + : "ғ" # U493 + : "ҟ" # U49f + : "Ғ" # U492 + : "Ҟ" # U49e + : "↚" # U219a + : "↛" # U219b + : "↮" # U21ae + : "≠" # U2260 + : "Ợ" # U1ee2 + : "Ự" # U1ef0 + : "ợ" # U1ee3 + : "ự" # U1ef1 + : "Ợ" # U1ee2 + : "Ự" # U1ef0 + : "ợ" # U1ee3 + : "ự" # U1ef1 + : "Ṻ" # U1e7a + : "ṻ" # U1e7b + : "Ṏ" # U1e4e + : "ṏ" # U1e4f + : "Ṻ" # U1e7a + : "ṻ" # U1e7b + : "Ṏ" # U1e4e + : "ṏ" # U1e4f + : "Ṻ" # U1e7a + : "ṻ" # U1e7b + : "΅" # U385 + : "Ḯ" # U1e2e + : "Ǘ" # U1d7 + : "ḯ" # U1e2f + : "ǘ" # U1d8 + : "ΐ" # U390 + : "ΰ" # U3b0 + : "Ἅ" # U1f0d + : "Ἕ" # U1f1d + : "Ἥ" # U1f2d + : "Ἵ" # U1f3d + : "Ὅ" # U1f4d + : "Ὕ" # U1f5d + : "Ὥ" # U1f6d + : "ἅ" # U1f05 + : "ἕ" # U1f15 + : "ἥ" # U1f25 + : "ἵ" # U1f35 + : "ὅ" # U1f45 + : "ὕ" # U1f55 + : "ὥ" # U1f65 + : "Ἄ" # U1f0c + : "Ἔ" # U1f1c + : "Ἤ" # U1f2c + : "Ἴ" # U1f3c + : "Ὄ" # U1f4c + : "Ὤ" # U1f6c + : "ἄ" # U1f04 + : "ἔ" # U1f14 + : "ἤ" # U1f24 + : "ἴ" # U1f34 + : "ὄ" # U1f44 + : "ὔ" # U1f54 + : "ὤ" # U1f64 + : "Ớ" # U1eda + : "Ứ" # U1ee8 + : "ớ" # U1edb + : "ứ" # U1ee9 + : "Ǿ" # U1fe + : "ǿ" # U1ff + : "Ấ" # U1ea4 + : "Ế" # U1ebe + : "Ố" # U1ed0 + : "ấ" # U1ea5 + : "ế" # U1ebf + : "ố" # U1ed1 + : "Ḗ" # U1e16 + : "Ṓ" # U1e52 + : "ḗ" # U1e17 + : "ṓ" # U1e53 + : "Ắ" # U1eae + : "ắ" # U1eaf + : "Ṍ" # U1e4c + : "Ṹ" # U1e78 + : "ṍ" # U1e4d + : "ṹ" # U1e79 + : "Ḗ" # U1e16 + : "Ṓ" # U1e52 + : "ḗ" # U1e17 + : "ṓ" # U1e53 + : "Ḉ" # U1e08 + : "ḉ" # U1e09 + : "Ấ" # U1ea4 + : "Ế" # U1ebe + : "Ố" # U1ed0 + : "ấ" # U1ea5 + : "ế" # U1ebf + : "ố" # U1ed1 + : "Ṍ" # U1e4c + : "Ṹ" # U1e78 + : "ṍ" # U1e4d + : "ṹ" # U1e79 + : "Ḗ" # U1e16 + : "Ṓ" # U1e52 + : "ḗ" # U1e17 + : "ṓ" # U1e53 + : "Ắ" # U1eae + : "ắ" # U1eaf + : "Ḯ" # U1e2e + : "Ǘ" # U1d7 + : "ḯ" # U1e2f + : "ǘ" # U1d8 + : "ΐ" # U390 + : "ΰ" # U3b0 + : "Ǻ" # U1fa + : "ǻ" # U1fb + : "Ḉ" # U1e08 + : "ḉ" # U1e09 + : "Ớ" # U1eda + : "Ứ" # U1ee8 + : "ớ" # U1edb + : "ứ" # U1ee9 + : "Ἄ" # U1f0c + : "Ἔ" # U1f1c + : "Ἤ" # U1f2c + : "Ἴ" # U1f3c + : "Ὄ" # U1f4c + : "Ὤ" # U1f6c + : "ἄ" # U1f04 + : "ἔ" # U1f14 + : "ἤ" # U1f24 + : "ἴ" # U1f34 + : "ὄ" # U1f44 + : "ὔ" # U1f54 + : "ὤ" # U1f64 + : "Ἅ" # U1f0d + : "Ἕ" # U1f1d + : "Ἥ" # U1f2d + : "Ἵ" # U1f3d + : "Ὅ" # U1f4d + : "Ὕ" # U1f5d + : "Ὥ" # U1f6d + : "ἅ" # U1f05 + : "ἕ" # U1f15 + : "ἥ" # U1f25 + : "ἵ" # U1f35 + : "ὅ" # U1f45 + : "ὕ" # U1f55 + : "ὥ" # U1f65 + : "Ǿ" # U1fe + : "ǿ" # U1ff + : "⓪" # U24ea + : "①" # U2460 + : "②" # U2461 + : "③" # U2462 + : "④" # U2463 + : "⑤" # U2464 + : "⑥" # U2465 + : "⑦" # U2466 + : "⑧" # U2467 + : "⑨" # U2468 + : "Ⓐ" # U24b6 + : "Ⓑ" # U24b7 + : "Ⓒ" # U24b8 + : "Ⓓ" # U24b9 + : "Ⓔ" # U24ba + : "Ⓕ" # U24bb + : "Ⓖ" # U24bc + : "Ⓗ" # U24bd + : "Ⓘ" # U24be + : "Ⓙ" # U24bf + : "Ⓚ" # U24c0 + : "Ⓛ" # U24c1 + : "Ⓜ" # U24c2 + : "Ⓝ" # U24c3 + : "Ⓞ" # U24c4 + : "Ⓟ" # U24c5 + : "Ⓠ" # U24c6 + : "Ⓡ" # U24c7 + : "Ⓢ" # U24c8 + : "Ⓣ" # U24c9 + : "Ⓤ" # U24ca + : "Ⓥ" # U24cb + : "Ⓦ" # U24cc + : "Ⓧ" # U24cd + : "Ⓨ" # U24ce + : "Ⓩ" # U24cf + : "ⓐ" # U24d0 + : "ⓑ" # U24d1 + : "ⓒ" # U24d2 + : "ⓓ" # U24d3 + : "ⓔ" # U24d4 + : "ⓕ" # U24d5 + : "ⓖ" # U24d6 + : "ⓗ" # U24d7 + : "ⓘ" # U24d8 + : "ⓙ" # U24d9 + : "ⓚ" # U24da + : "ⓛ" # U24db + : "ⓜ" # U24dc + : "ⓝ" # U24dd + : "ⓞ" # U24de + : "ⓟ" # U24df + : "ⓠ" # U24e0 + : "ⓡ" # U24e1 + : "ⓢ" # U24e2 + : "ⓣ" # U24e3 + : "ⓤ" # U24e4 + : "ⓥ" # U24e5 + : "ⓦ" # U24e6 + : "ⓧ" # U24e7 + : "ⓨ" # U24e8 + : "ⓩ" # U24e9 + : "㋾" # U32fe + : "㋐" # U32d0 + : "㋑" # U32d1 + : "㋒" # U32d2 + : "㋓" # U32d3 + : "㋔" # U32d4 + : "㋕" # U32d5 + : "㋖" # U32d6 + : "㋗" # U32d7 + : "㋘" # U32d8 + : "㋙" # U32d9 + : "㋚" # U32da + : "㋛" # U32db + : "㋜" # U32dc + : "㋝" # U32dd + : "㋞" # U32de + : "㋟" # U32df + : "㋠" # U32e0 + : "㋡" # U32e1 + : "㋢" # U32e2 + : "㋣" # U32e3 + : "㋤" # U32e4 + : "㋥" # U32e5 + : "㋦" # U32e6 + : "㋧" # U32e7 + : "㋨" # U32e8 + : "㋩" # U32e9 + : "㋪" # U32ea + : "㋫" # U32eb + : "㋬" # U32ec + : "㋭" # U32ed + : "㋮" # U32ee + : "㋯" # U32ef + : "㋰" # U32f0 + : "㋱" # U32f1 + : "㋲" # U32f2 + : "㋳" # U32f3 + : "㋴" # U32f4 + : "㋵" # U32f5 + : "㋶" # U32f6 + : "㋷" # U32f7 + : "㋸" # U32f8 + : "㋹" # U32f9 + : "㋺" # U32fa + : "㋻" # U32fb + : "㉠" # U3260 + : "㉡" # U3261 + : "㉢" # U3262 + : "㉣" # U3263 + : "㉤" # U3264 + : "㉥" # U3265 + : "㉦" # U3266 + : "㉧" # U3267 + : "㉨" # U3268 + : "㉩" # U3269 + : "㉪" # U326a + : "㉫" # U326b + : "㉬" # U326c + : "㉭" # U326d + : "㋼" # U32fc + : "㋽" # U32fd + : "㊀" # U3280 + : "㊆" # U3286 + : "㊂" # U3282 + : "㊤" # U32a4 + : "㊦" # U32a6 + : "㊥" # U32a5 + : "㊈" # U3288 + : "㊁" # U3281 + : "㊄" # U3284 + : "㊭" # U32ad + : "㊡" # U32a1 + : "㊝" # U329d + : "㊇" # U3287 + : "㊅" # U3285 + : "㊢" # U32a2 + : "㊘" # U3298 + : "㊩" # U32a9 + : "㊉" # U3289 + : "㊯" # U32af + : "㊞" # U329e + : "㊨" # U32a8 + : "㊔" # U3294 + : "㊃" # U3283 + : "㊏" # U328f + : "㊰" # U32b0 + : "㊛" # U329b + : "㊫" # U32ab + : "㊪" # U32aa + : "㊧" # U32a7 + : "㊐" # U3290 + : "㊊" # U328a + : "㊒" # U3292 + : "㊍" # U328d + : "㊑" # U3291 + : "㊣" # U32a3 + : "㊌" # U328c + : "㊟" # U329f + : "㊋" # U328b + : "㊕" # U3295 + : "㊚" # U329a + : "㊬" # U32ac + : "㊓" # U3293 + : "㊗" # U3297 + : "㊙" # U3299 + : "㊖" # U3296 + : "㊮" # U32ae + : "㊜" # U329c + : "㊎" # U328e + : "㊠" # U32a0 + : "②" # U2461 + : "⓪" # U24ea + : "①" # U2460 + : "②" # U2461 + : "③" # U2462 + : "④" # U2463 + : "⑤" # U2464 + : "⑥" # U2465 + : "⑦" # U2466 + : "⑧" # U2467 + : "⑨" # U2468 + : "Ǻ" # U1fa + : "ǻ" # U1fb + : "\0\2\5\5" # Uad + : "—" # U2014 + : "–" # U2013 + : "Ṩ" # U1e68 + : "ṩ" # U1e69 + : "Ṥ" # U1e64 + : "ṥ" # U1e65 + : "Ṥ" # U1e64 + : "ṥ" # U1e65 + : "Ṥ" # U1e64 + : "ṥ" # U1e65 + : "Ṧ" # U1e66 + : "ṧ" # U1e67 + : "Ṩ" # U1e68 + : "ṩ" # U1e69 + : "⅒" # U2152 + : "Ở" # U1ede + : "Ử" # U1eec + : "ở" # U1edf + : "ử" # U1eed + : "Ẩ" # U1ea8 + : "Ể" # U1ec2 + : "Ổ" # U1ed4 + : "ẩ" # U1ea9 + : "ể" # U1ec3 + : "ổ" # U1ed5 + : "Ẳ" # U1eb2 + : "ẳ" # U1eb3 + : "Ẩ" # U1ea8 + : "Ể" # U1ec2 + : "Ổ" # U1ed4 + : "ẩ" # U1ea9 + : "ể" # U1ec3 + : "ổ" # U1ed5 + : "Ẳ" # U1eb2 + : "ẳ" # U1eb3 + : "Ở" # U1ede + : "Ử" # U1eec + : "ở" # U1edf + : "ử" # U1eed + : "Ặ" # U1eb6 + : "ặ" # U1eb7 + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "Ặ" # U1eb6 + : "ặ" # U1eb7 + : "🙌" # U1f64c + : "Ậ" # U1eac + : "Ệ" # U1ec6 + : "Ộ" # U1ed8 + : "ậ" # U1ead + : "ệ" # U1ec7 + : "ộ" # U1ed9 + : "ª" # Uaa + : "ʰ" # U2b0 + : "ⁱ" # U2071 + : "ʲ" # U2b2 + : "ˡ" # U2e1 + : "ⁿ" # U207f + : "º" # Uba + : "ʳ" # U2b3 + : "ˢ" # U2e2 + : "ʷ" # U2b7 + : "ˣ" # U2e3 + : "ʸ" # U2b8 + : "ˠ" # U2e0 + : "ʱ" # U2b1 + : "ʴ" # U2b4 + : "ʵ" # U2b5 + : "ʶ" # U2b6 + : "ˤ" # U2e4 + : "ª" # Uaa + : "ʰ" # U2b0 + : "ⁱ" # U2071 + : "ʲ" # U2b2 + : "ˡ" # U2e1 + : "ⁿ" # U207f + : "º" # Uba + : "ʳ" # U2b3 + : "ˢ" # U2e2 + : "ʷ" # U2b7 + : "ˣ" # U2e3 + : "ʸ" # U2b8 + : "ˠ" # U2e0 + : "ʱ" # U2b1 + : "ʴ" # U2b4 + : "ʵ" # U2b5 + : "ʶ" # U2b6 + : "ˤ" # U2e4 + : "Ậ" # U1eac + : "Ệ" # U1ec6 + : "Ộ" # U1ed8 + : "ậ" # U1ead + : "ệ" # U1ec7 + : "ộ" # U1ed9 + : "Ḹ" # U1e38 + : "Ṝ" # U1e5c + : "ḹ" # U1e39 + : "ṝ" # U1e5d + : "Ǟ" # U1de + : "Ȫ" # U22a + : "Ǖ" # U1d5 + : "ǟ" # U1df + : "ȫ" # U22b + : "ǖ" # U1d6 + : "Ǡ" # U1e0 + : "Ȱ" # U230 + : "ǡ" # U1e1 + : "ȱ" # U231 + : "Ǭ" # U1ec + : "ǭ" # U1ed + : "Ȭ" # U22c + : "ȭ" # U22d + : "Ȭ" # U22c + : "ȭ" # U22d + : "Ǡ" # U1e0 + : "Ȱ" # U230 + : "ǡ" # U1e1 + : "ȱ" # U231 + : "Ǟ" # U1de + : "Ȫ" # U22a + : "Ǖ" # U1d5 + : "ǟ" # U1df + : "ȫ" # U22b + : "ǖ" # U1d6 + : "Ǭ" # U1ec + : "ǭ" # U1ed + : "Ḹ" # U1e38 + : "Ṝ" # U1e5c + : "ḹ" # U1e39 + : "ṝ" # U1e5d + : "Ǜ" # U1db + : "ǜ" # U1dc + : "ῒ" # U1fd2 + : "ῢ" # U1fe2 + : "Ἃ" # U1f0b + : "Ἓ" # U1f1b + : "Ἣ" # U1f2b + : "Ἳ" # U1f3b + : "Ὃ" # U1f4b + : "Ὓ" # U1f5b + : "Ὣ" # U1f6b + : "ἃ" # U1f03 + : "ἓ" # U1f13 + : "ἣ" # U1f23 + : "ἳ" # U1f33 + : "ὃ" # U1f43 + : "ὓ" # U1f53 + : "ὣ" # U1f63 + : "Ἂ" # U1f0a + : "Ἒ" # U1f1a + : "Ἢ" # U1f2a + : "Ἲ" # U1f3a + : "Ὂ" # U1f4a + : "Ὢ" # U1f6a + : "ἂ" # U1f02 + : "ἒ" # U1f12 + : "ἢ" # U1f22 + : "ἲ" # U1f32 + : "ὂ" # U1f42 + : "ὒ" # U1f52 + : "ὢ" # U1f62 + : "Ờ" # U1edc + : "Ừ" # U1eea + : "ờ" # U1edd + : "ừ" # U1eeb + : "Ầ" # U1ea6 + : "Ề" # U1ec0 + : "Ồ" # U1ed2 + : "ầ" # U1ea7 + : "ề" # U1ec1 + : "ồ" # U1ed3 + : "Ḕ" # U1e14 + : "Ṑ" # U1e50 + : "ḕ" # U1e15 + : "ṑ" # U1e51 + : "а̏" + : "е̏" + : "и̏" + : "о̏" + : "р̏" + : "у̏" + : "А̏" + : "Е̏" + : "И̏" + : "О̏" + : "Р̏" + : "У̏" + : "Ằ" # U1eb0 + : "ằ" # U1eb1 + : "Ḕ" # U1e14 + : "Ṑ" # U1e50 + : "ḕ" # U1e15 + : "ṑ" # U1e51 + : "Ầ" # U1ea6 + : "Ề" # U1ec0 + : "Ồ" # U1ed2 + : "ầ" # U1ea7 + : "ề" # U1ec1 + : "ồ" # U1ed3 + : "Ḕ" # U1e14 + : "Ṑ" # U1e50 + : "ḕ" # U1e15 + : "ṑ" # U1e51 + : "Ằ" # U1eb0 + : "ằ" # U1eb1 + : "Ǜ" # U1db + : "ǜ" # U1dc + : "ῒ" # U1fd2 + : "ῢ" # U1fe2 + : "Ờ" # U1edc + : "Ừ" # U1eea + : "ờ" # U1edd + : "ừ" # U1eeb + : "Ἂ" # U1f0a + : "Ἒ" # U1f1a + : "Ἢ" # U1f2a + : "Ἲ" # U1f3a + : "Ὂ" # U1f4a + : "Ὢ" # U1f6a + : "ἂ" # U1f02 + : "ἒ" # U1f12 + : "ἢ" # U1f22 + : "ἲ" # U1f32 + : "ὂ" # U1f42 + : "ὒ" # U1f52 + : "ὢ" # U1f62 + : "Ἃ" # U1f0b + : "Ἓ" # U1f1b + : "Ἣ" # U1f2b + : "Ἳ" # U1f3b + : "Ὃ" # U1f4b + : "Ὓ" # U1f5b + : "Ὣ" # U1f6b + : "ἃ" # U1f03 + : "ἓ" # U1f13 + : "ἣ" # U1f23 + : "ἳ" # U1f33 + : "ὃ" # U1f43 + : "ὓ" # U1f53 + : "ὣ" # U1f63 + : "Ặ" # U1eb6 + : "ặ" # U1eb7 + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "Ḝ" # U1e1c + : "ḝ" # U1e1d + : "Ặ" # U1eb6 + : "ặ" # U1eb7 + : "Ǚ" # U1d9 + : "ǚ" # U1da + : "Ǚ" # U1d9 + : "ǚ" # U1da + : "💩" # U1f4a9 + : "ῗ" # U1fd7 + : "ῧ" # U1fe7 + : "Ἇ" # U1f0f + : "Ἧ" # U1f2f + : "Ἷ" # U1f3f + : "Ὗ" # U1f5f + : "Ὧ" # U1f6f + : "ἇ" # U1f07 + : "ἧ" # U1f27 + : "ἷ" # U1f37 + : "ὗ" # U1f57 + : "ὧ" # U1f67 + : "Ἆ" # U1f0e + : "Ἦ" # U1f2e + : "Ἶ" # U1f3e + : "Ὦ" # U1f6e + : "ἆ" # U1f06 + : "ἦ" # U1f26 + : "ἶ" # U1f36 + : "ὖ" # U1f56 + : "ὦ" # U1f66 + : "Ỡ" # U1ee0 + : "Ữ" # U1eee + : "ỡ" # U1ee1 + : "ữ" # U1eef + : "Ẫ" # U1eaa + : "Ễ" # U1ec4 + : "Ỗ" # U1ed6 + : "ẫ" # U1eab + : "ễ" # U1ec5 + : "ỗ" # U1ed7 + : "Ẵ" # U1eb4 + : "ẵ" # U1eb5 + : "Ẫ" # U1eaa + : "Ễ" # U1ec4 + : "Ỗ" # U1ed6 + : "ẫ" # U1eab + : "ễ" # U1ec5 + : "ỗ" # U1ed7 + : "Ẵ" # U1eb4 + : "ẵ" # U1eb5 + : "ῗ" # U1fd7 + : "ῧ" # U1fe7 + : "Ỡ" # U1ee0 + : "Ữ" # U1eee + : "ỡ" # U1ee1 + : "ữ" # U1eef + : "Ἆ" # U1f0e + : "Ἦ" # U1f2e + : "Ἶ" # U1f3e + : "Ὦ" # U1f6e + : "ἆ" # U1f06 + : "ἦ" # U1f26 + : "ἶ" # U1f36 + : "ὖ" # U1f56 + : "ὦ" # U1f66 + : "Ἇ" # U1f0f + : "Ἧ" # U1f2f + : "Ἷ" # U1f3f + : "Ὗ" # U1f5f + : "Ὧ" # U1f6f + : "ἇ" # U1f07 + : "ἧ" # U1f27 + : "ἷ" # U1f37 + : "ὗ" # U1f57 + : "ὧ" # U1f67 + : "Ḹ" # U1e38 + : "Ṝ" # U1e5c + : "ḹ" # U1e39 + : "ṝ" # U1e5d + : "Ǟ" # U1de + : "Ȫ" # U22a + : "Ǖ" # U1d5 + : "ǟ" # U1df + : "ȫ" # U22b + : "ǖ" # U1d6 + : "Ǡ" # U1e0 + : "Ȱ" # U230 + : "ǡ" # U1e1 + : "ȱ" # U231 + : "Ǭ" # U1ec + : "ǭ" # U1ed + : "Ȭ" # U22c + : "ȭ" # U22d + : "Ȭ" # U22c + : "ȭ" # U22d + : "Ǡ" # U1e0 + : "Ȱ" # U230 + : "ǡ" # U1e1 + : "ȱ" # U231 + : "Ǟ" # U1de + : "Ȫ" # U22a + : "Ǖ" # U1d5 + : "ǟ" # U1df + : "ȫ" # U22b + : "ǖ" # U1d6 + : "Ǭ" # U1ec + : "ǭ" # U1ed + : "Ḹ" # U1e38 + : "Ṝ" # U1e5c + : "ḹ" # U1e39 + : "ṝ" # U1e5d + : "Ḯ" # U1e2e + : "Ǘ" # U1d7 + : "ḯ" # U1e2f + : "ǘ" # U1d8 + : "ΐ" # U390 + : "ΰ" # U3b0 + : "Ἅ" # U1f0d + : "Ἕ" # U1f1d + : "Ἥ" # U1f2d + : "Ἵ" # U1f3d + : "Ὅ" # U1f4d + : "Ὕ" # U1f5d + : "Ὥ" # U1f6d + : "ἅ" # U1f05 + : "ἕ" # U1f15 + : "ἥ" # U1f25 + : "ἵ" # U1f35 + : "ὅ" # U1f45 + : "ὕ" # U1f55 + : "ὥ" # U1f65 + : "Ἄ" # U1f0c + : "Ἔ" # U1f1c + : "Ἤ" # U1f2c + : "Ἴ" # U1f3c + : "Ὄ" # U1f4c + : "Ὤ" # U1f6c + : "ἄ" # U1f04 + : "ἔ" # U1f14 + : "ἤ" # U1f24 + : "ἴ" # U1f34 + : "ὄ" # U1f44 + : "ὔ" # U1f54 + : "ὤ" # U1f64 + : "Ớ" # U1eda + : "Ứ" # U1ee8 + : "ớ" # U1edb + : "ứ" # U1ee9 + : "Ḉ" # U1e08 + : "ḉ" # U1e09 + : "Ǿ" # U1fe + : "ǿ" # U1ff + : "Ấ" # U1ea4 + : "Ế" # U1ebe + : "Ố" # U1ed0 + : "ấ" # U1ea5 + : "ế" # U1ebf + : "ố" # U1ed1 + : "Ḗ" # U1e16 + : "Ṓ" # U1e52 + : "ḗ" # U1e17 + : "ṓ" # U1e53 + : "Ắ" # U1eae + : "ắ" # U1eaf + : "Ṍ" # U1e4c + : "Ṹ" # U1e78 + : "ṍ" # U1e4d + : "ṹ" # U1e79 + : "Ḗ" # U1e16 + : "Ṓ" # U1e52 + : "ḗ" # U1e17 + : "ṓ" # U1e53 + : "Ḉ" # U1e08 + : "ḉ" # U1e09 + : "Ấ" # U1ea4 + : "Ế" # U1ebe + : "Ố" # U1ed0 + : "ấ" # U1ea5 + : "ế" # U1ebf + : "ố" # U1ed1 + : "Ṍ" # U1e4c + : "Ṹ" # U1e78 + : "ṍ" # U1e4d + : "ṹ" # U1e79 + : "Ḗ" # U1e16 + : "Ṓ" # U1e52 + : "ḗ" # U1e17 + : "ṓ" # U1e53 + : "Ắ" # U1eae + : "ắ" # U1eaf + : "Ḯ" # U1e2e + : "Ǘ" # U1d7 + : "ḯ" # U1e2f + : "ǘ" # U1d8 + : "ΐ" # U390 + : "ΰ" # U3b0 + : "Ǻ" # U1fa + : "ǻ" # U1fb + : "Ḉ" # U1e08 + : "ḉ" # U1e09 + : "Ớ" # U1eda + : "Ứ" # U1ee8 + : "ớ" # U1edb + : "ứ" # U1ee9 + : "Ἄ" # U1f0c + : "Ἔ" # U1f1c + : "Ἤ" # U1f2c + : "Ἴ" # U1f3c + : "Ὄ" # U1f4c + : "Ὤ" # U1f6c + : "ἄ" # U1f04 + : "ἔ" # U1f14 + : "ἤ" # U1f24 + : "ἴ" # U1f34 + : "ὄ" # U1f44 + : "ὔ" # U1f54 + : "ὤ" # U1f64 + : "Ἅ" # U1f0d + : "Ἕ" # U1f1d + : "Ἥ" # U1f2d + : "Ἵ" # U1f3d + : "Ὅ" # U1f4d + : "Ὕ" # U1f5d + : "Ὥ" # U1f6d + : "ἅ" # U1f05 + : "ἕ" # U1f15 + : "ἥ" # U1f25 + : "ἵ" # U1f35 + : "ὅ" # U1f45 + : "ὕ" # U1f55 + : "ὥ" # U1f65 + : "Ǿ" # U1fe + : "ǿ" # U1ff + : "שּׁ" # Ufb2c + : "שּׂ" # Ufb2d + : "ᾴ" # U1fb4 + : "ῄ" # U1fc4 + : "ῴ" # U1ff4 + : "ᾄ" # U1f84 + : "ᾅ" # U1f85 + : "ᾌ" # U1f8c + : "ᾍ" # U1f8d + : "ᾔ" # U1f94 + : "ᾕ" # U1f95 + : "ᾜ" # U1f9c + : "ᾝ" # U1f9d + : "ᾤ" # U1fa4 + : "ᾥ" # U1fa5 + : "ᾬ" # U1fac + : "ᾭ" # U1fad + : "ᾉ" # U1f89 + : "ᾙ" # U1f99 + : "ᾩ" # U1fa9 + : "ᾁ" # U1f81 + : "ᾑ" # U1f91 + : "ᾡ" # U1fa1 + : "ᾈ" # U1f88 + : "ᾘ" # U1f98 + : "ᾨ" # U1fa8 + : "ᾀ" # U1f80 + : "ᾐ" # U1f90 + : "ᾠ" # U1fa0 + : "ᾲ" # U1fb2 + : "ῂ" # U1fc2 + : "ῲ" # U1ff2 + : "ᾂ" # U1f82 + : "ᾃ" # U1f83 + : "ᾊ" # U1f8a + : "ᾋ" # U1f8b + : "ᾒ" # U1f92 + : "ᾓ" # U1f93 + : "ᾚ" # U1f9a + : "ᾛ" # U1f9b + : "ᾢ" # U1fa2 + : "ᾣ" # U1fa3 + : "ᾪ" # U1faa + : "ᾫ" # U1fab + : "ᾷ" # U1fb7 + : "ῇ" # U1fc7 + : "ῷ" # U1ff7 + : "ᾆ" # U1f86 + : "ᾇ" # U1f87 + : "ᾎ" # U1f8e + : "ᾏ" # U1f8f + : "ᾖ" # U1f96 + : "ᾗ" # U1f97 + : "ᾞ" # U1f9e + : "ᾟ" # U1f9f + : "ᾦ" # U1fa6 + : "ᾧ" # U1fa7 + : "ᾮ" # U1fae + : "ᾯ" # U1faf + : "ᾴ" # U1fb4 + : "ῄ" # U1fc4 + : "ῴ" # U1ff4 + : "ᾄ" # U1f84 + : "ᾅ" # U1f85 + : "ᾌ" # U1f8c + : "ᾍ" # U1f8d + : "ᾔ" # U1f94 + : "ᾕ" # U1f95 + : "ᾜ" # U1f9c + : "ᾝ" # U1f9d + : "ᾤ" # U1fa4 + : "ᾥ" # U1fa5 + : "ᾬ" # U1fac + : "ᾭ" # U1fad + : "ᾲ" # U1fb2 + : "ῂ" # U1fc2 + : "ῲ" # U1ff2 + : "ᾂ" # U1f82 + : "ᾃ" # U1f83 + : "ᾊ" # U1f8a + : "ᾋ" # U1f8b + : "ᾒ" # U1f92 + : "ᾓ" # U1f93 + : "ᾚ" # U1f9a + : "ᾛ" # U1f9b + : "ᾢ" # U1fa2 + : "ᾣ" # U1fa3 + : "ᾪ" # U1faa + : "ᾫ" # U1fab + : "ᾴ" # U1fb4 + : "ῄ" # U1fc4 + : "ῴ" # U1ff4 + : "ᾄ" # U1f84 + : "ᾅ" # U1f85 + : "ᾌ" # U1f8c + : "ᾍ" # U1f8d + : "ᾔ" # U1f94 + : "ᾕ" # U1f95 + : "ᾜ" # U1f9c + : "ᾝ" # U1f9d + : "ᾤ" # U1fa4 + : "ᾥ" # U1fa5 + : "ᾬ" # U1fac + : "ᾭ" # U1fad + : "ᾷ" # U1fb7 + : "ῇ" # U1fc7 + : "ῷ" # U1ff7 + : "ᾆ" # U1f86 + : "ᾇ" # U1f87 + : "ᾎ" # U1f8e + : "ᾏ" # U1f8f + : "ᾖ" # U1f96 + : "ᾗ" # U1f97 + : "ᾞ" # U1f9e + : "ᾟ" # U1f9f + : "ᾦ" # U1fa6 + : "ᾧ" # U1fa7 + : "ᾮ" # U1fae + : "ᾯ" # U1faf + : "ᾈ" # U1f88 + : "ᾘ" # U1f98 + : "ᾨ" # U1fa8 + : "ᾀ" # U1f80 + : "ᾐ" # U1f90 + : "ᾠ" # U1fa0 + : "ᾉ" # U1f89 + : "ᾙ" # U1f99 + : "ᾩ" # U1fa9 + : "ᾁ" # U1f81 + : "ᾑ" # U1f91 + : "ᾡ" # U1fa1 + : "ẛ" # U1e9b : "⑩" # U2469 : "⑪" # U246a : "⑫" # U246b @@ -1343,7 +4553,6 @@ : "⑰" # U2470 : "⑱" # U2471 : "⑲" # U2472 - : "②" # U2461 : "⑳" # U2473 : "㉑" # U3251 : "㉒" # U3252 @@ -1365,7 +4574,6 @@ : "㉗" # U3257 : "㉘" # U3258 : "㉙" # U3259 - : "③" # U2462 : "㉚" # U325a : "㉛" # U325b : "㉜" # U325c @@ -1387,7 +4595,6 @@ : "㊲" # U32b2 : "㊳" # U32b3 : "㊴" # U32b4 - : "④" # U2463 : "㊵" # U32b5 : "㊶" # U32b6 : "㊷" # U32b7 @@ -1409,211 +4616,22 @@ : "㊼" # U32bc : "㊽" # U32bd : "㊾" # U32be - : "⑤" # U2464 + : "㊿" # U32bf : "㊿" # U32bf - : "⑥" # U2465 - : "⑦" # U2466 - : "⑧" # U2467 - : "⑨" # U2468 - : "Ă" # U102 - : "Ⓐ" # U24b6 - : "Ⓑ" # U24b7 - : "Ⓒ" # U24b8 - : "Ⓓ" # U24b9 - : "Ⓔ" # U24ba - : "Ⓕ" # U24bb - : "Ğ" # U11e - : "Ⓖ" # U24bc - : "Ⓗ" # U24bd - : "Ⓘ" # U24be - : "Ⓙ" # U24bf - : "Ⓚ" # U24c0 - : "Ⓛ" # U24c1 - : "Ⓜ" # U24c2 - : "Ⓝ" # U24c3 - : "Ⓞ" # U24c4 - : "Ⓟ" # U24c5 - : "Ⓠ" # U24c6 - : "Ⓡ" # U24c7 - : "Ⓢ" # U24c8 - : "Ⓣ" # U24c9 - : "Ⓤ" # U24ca - : "Ⓥ" # U24cb - : "Ⓦ" # U24cc - : "Ⓧ" # U24cd - : "Ⓨ" # U24ce - : "Ⓩ" # U24cf - : "ă" # U103 - : "ⓐ" # U24d0 - : "ⓑ" # U24d1 - : "©" # Ua9 - : "ⓒ" # U24d2 - : "ⓓ" # U24d3 - : "ⓔ" # U24d4 - : "ⓕ" # U24d5 - : "ğ" # U11f - : "ⓖ" # U24d6 - : "ⓗ" # U24d7 - : "ⓘ" # U24d8 - : "ⓙ" # U24d9 - : "ⓚ" # U24da - : "ⓛ" # U24db - : "ⓜ" # U24dc - : "ⓝ" # U24dd - : "ⓞ" # U24de - : "ⓟ" # U24df - : "ⓠ" # U24e0 - : "®" # Uae - : "ⓡ" # U24e1 - : "ⓢ" # U24e2 - : "ⓣ" # U24e3 - : "ⓤ" # U24e4 - : "ⓥ" # U24e5 - : "ⓦ" # U24e6 - : "ⓧ" # U24e7 - : "ⓨ" # U24e8 - : "ⓩ" # U24e9 - : "㋾" # U32fe - : "㋐" # U32d0 - : "㋑" # U32d1 - : "㋒" # U32d2 - : "㋓" # U32d3 - : "㋔" # U32d4 - : "㋕" # U32d5 - : "㋖" # U32d6 - : "㋗" # U32d7 - : "㋘" # U32d8 - : "㋙" # U32d9 - : "㋚" # U32da - : "㋛" # U32db - : "㋜" # U32dc - : "㋝" # U32dd - : "㋞" # U32de - : "㋟" # U32df - : "㋠" # U32e0 - : "㋡" # U32e1 - : "㋢" # U32e2 - : "㋣" # U32e3 - : "㋤" # U32e4 - : "㋥" # U32e5 - : "㋦" # U32e6 - : "㋧" # U32e7 - : "㋨" # U32e8 - : "㋩" # U32e9 - : "㋪" # U32ea - : "㋫" # U32eb - : "㋬" # U32ec - : "㋭" # U32ed - : "㋮" # U32ee - : "㋯" # U32ef - : "㋰" # U32f0 - : "㋱" # U32f1 - : "㋲" # U32f2 - : "㋳" # U32f3 - : "㋴" # U32f4 - : "㋵" # U32f5 - : "㋶" # U32f6 - : "㋷" # U32f7 - : "㋸" # U32f8 - : "㋹" # U32f9 - : "㋺" # U32fa - : "㋻" # U32fb - : "Ἁ" # U1f09 - : "Ἑ" # U1f19 - : "Ἡ" # U1f29 - : "Ἱ" # U1f39 - : "Ὁ" # U1f49 - : "Ῥ" # U1fec - : "Ὑ" # U1f59 - : "Ὡ" # U1f69 - : "ἁ" # U1f01 - : "ἑ" # U1f11 - : "ἡ" # U1f21 - : "ἱ" # U1f31 - : "ὁ" # U1f41 - : "ῥ" # U1fe5 - : "ὑ" # U1f51 - : "ὡ" # U1f61 - : "㉠" # U3260 : "㉮" # U326e - : "㉡" # U3261 : "㉯" # U326f - : "㉢" # U3262 : "㉰" # U3270 - : "㉣" # U3263 : "㉱" # U3271 - : "㉤" # U3264 : "㉲" # U3272 - : "㉥" # U3265 : "㉳" # U3273 - : "㉦" # U3266 : "㉴" # U3274 - : "㉧" # U3267 : "㉵" # U3275 - : "㉨" # U3268 : "㉶" # U3276 - : "㉩" # U3269 : "㉷" # U3277 - : "㉪" # U326a : "㉸" # U3278 - : "㉫" # U326b : "㉹" # U3279 - : "㉬" # U326c : "㉺" # U327a - : "㉭" # U326d : "㉻" # U327b - : "㋼" # U32fc - : "㋽" # U32fd - : "㊀" # U3280 - : "㊆" # U3286 - : "㊂" # U3282 - : "㊤" # U32a4 - : "㊦" # U32a6 - : "㊥" # U32a5 - : "㊈" # U3288 - : "㊁" # U3281 - : "㊄" # U3284 - : "㊭" # U32ad - : "㊡" # U32a1 - : "㊝" # U329d - : "㊇" # U3287 - : "㊅" # U3285 - : "㊢" # U32a2 - : "㊘" # U3298 - : "㊩" # U32a9 - : "㊉" # U3289 - : "㊯" # U32af - : "㊞" # U329e - : "㊨" # U32a8 - : "㊔" # U3294 - : "㊃" # U3283 - : "㊏" # U328f - : "㊰" # U32b0 - : "㊛" # U329b - : "㊫" # U32ab - : "㊪" # U32aa - : "㊧" # U32a7 - : "㊐" # U3290 - : "㊊" # U328a - : "㊒" # U3292 - : "㊍" # U328d - : "㊑" # U3291 - : "㊣" # U32a3 - : "㊌" # U328c - : "㊟" # U329f - : "㊋" # U328b - : "㊕" # U3295 - : "㊚" # U329a - : "㊬" # U32ac - : "㊓" # U3293 - : "㊗" # U3297 - : "㊙" # U3299 - : "㊖" # U3296 - : "㊮" # U32ae - : "㊜" # U329c - : "㊎" # U328e - : "㊠" # U32a0 - : "②" # U2461 : "⑳" # U2473 : "㉑" # U3251 : "㉒" # U3252 @@ -1635,8 +4653,6 @@ : "㉗" # U3257 : "㉘" # U3258 : "㉙" # U3259 - : "⓪" # U24ea - : "①" # U2460 : "⑩" # U2469 : "⑪" # U246a : "⑫" # U246b @@ -1658,7 +4674,6 @@ : "⑰" # U2470 : "⑱" # U2471 : "⑲" # U2472 - : "②" # U2461 : "⑳" # U2473 : "㉑" # U3251 : "㉒" # U3252 @@ -1680,7 +4695,6 @@ : "㉗" # U3257 : "㉘" # U3258 : "㉙" # U3259 - : "③" # U2462 : "㉚" # U325a : "㉛" # U325b : "㉜" # U325c @@ -1702,7 +4716,6 @@ : "㊲" # U32b2 : "㊳" # U32b3 : "㊴" # U32b4 - : "④" # U2463 : "㊵" # U32b5 : "㊶" # U32b6 : "㊷" # U32b7 @@ -1724,1936 +4737,12 @@ : "㊼" # U32bc : "㊽" # U32bd : "㊾" # U32be - : "⑤" # U2464 + : "㊿" # U32bf : "㊿" # U32bf - : "⑥" # U2465 - : "⑦" # U2466 - : "⑧" # U2467 - : "⑨" # U2468 - : "]" # U5d - : "}" # U7d - : "Ἀ" # U1f08 - : "Ἐ" # U1f18 - : "Ἠ" # U1f28 - : "Ἰ" # U1f38 - : "Ὀ" # U1f48 - : "Ὠ" # U1f68 - : "ἀ" # U1f00 - : "ἐ" # U1f10 - : "ἠ" # U1f20 - : "ἰ" # U1f30 - : "ὀ" # U1f40 - : "ῤ" # U1fe4 - : "ὐ" # U1f50 - : "ὠ" # U1f60 - : "Ǻ" # U1fa - : "ǻ" # U1fb - : "°" # Ub0 - : "Å" # Uc5 - : "Ů" # U16e - : "å" # Ue5 - : "ů" # U16f - : "⍣" # U2363 - : "⍟" # U235f - : "#" # U23 - : "±" # Ub1 - : "Ơ" # U1a0 - : "Ư" # U1af - : "ơ" # U1a1 - : "ư" # U1b0 - : "¸" # Ub8 - : "„" # U201e - : "‚" # U201a - : "¸" # Ub8 - : "¬" # Uac - : "Ą" # U104 - : "Ç" # Uc7 - : "Ḑ" # U1e10 - : "Ę" # U118 - : "Ģ" # U122 - : "Ḩ" # U1e28 - : "Į" # U12e - : "Ķ" # U136 - : "Ļ" # U13b - : "Ņ" # U145 - : "Ǫ" # U1ea - : "Ŗ" # U156 - : "Ş" # U15e - : "Ţ" # U162 - : "Ų" # U172 - : "ą" # U105 - : "ç" # Ue7 - : "ḑ" # U1e11 - : "ę" # U119 - : "ģ" # U123 - : "ḩ" # U1e29 - : "į" # U12f - : "ķ" # U137 - : "ļ" # U13c - : "ņ" # U146 - : "ǫ" # U1eb - : "ŗ" # U157 - : "ş" # U15f - : "ţ" # U163 - : "ų" # U173 - : "~" # U7e - : "{" # U7b - : "}" # U7d - : "±" # Ub1 - : "¬" # Uac - : "­" # Uad - : "—" # U2014 - : "–" # U2013 - : "⌿" # U233f - : "÷" # Uf7 - : "→" # U2192 - : "Ã" # Uc3 - : "Đ" # U110 - : "Ē" # U112 - : "Ī" # U12a - : "£" # Ua3 - : "Ñ" # Ud1 - : "Õ" # Ud5 - : "Ū" # U16a - : "¥" # Ua5 - : "⍀" # U2340 - : "¯" # Uaf - : "ā" # U101 - : "đ" # U111 - : "ē" # U113 - : "ī" # U12b - : "£" # Ua3 - : "ñ" # Uf1 - : "ō" # U14d - : "ū" # U16b - : "¥" # Ua5 - : "⊖" # U2296 - : "⍏" # U234f - : "⍖" # U2356 - : "Ṩ" # U1e68 - : "ṩ" # U1e69 - : "Ṥ" # U1e64 - : "ṥ" # U1e65 - : "·" # Ub7 - : "…" # U2026 - : "∵" # U2235 - : "‹" # U2039 - : "•" # U2022 - : "›" # U203a - : "Ȧ" # U226 - : "Ḃ" # U1e02 - : "Ċ" # U10a - : "Ḋ" # U1e0a - : "Ė" # U116 - : "Ḟ" # U1e1e - : "Ġ" # U120 - : "Ḣ" # U1e22 - : "İ" # U130 - : "Ṁ" # U1e40 - : "Ṅ" # U1e44 - : "Ȯ" # U22e - : "Ṗ" # U1e56 - : "Ṙ" # U1e58 - : "Ṡ" # U1e60 - : "Ṫ" # U1e6a - : "Ẇ" # U1e86 - : "Ẋ" # U1e8a - : "Ẏ" # U1e8e - : "Ż" # U17b - : "·" # Ub7 - : "ȧ" # U227 - : "ḃ" # U1e03 - : "ċ" # U10b - : "ḋ" # U1e0b - : "ė" # U117 - : "ḟ" # U1e1f - : "ġ" # U121 - : "ḣ" # U1e23 - : "ı" # U131 - : "ṁ" # U1e41 - : "ṅ" # U1e45 - : "ȯ" # U22f - : "ṗ" # U1e57 - : "ṙ" # U1e59 - : "ṡ" # U1e61 - : "ṫ" # U1e6b - : "ẇ" # U1e87 - : "ẋ" # U1e8b - : "ẏ" # U1e8f - : "ż" # U17c - : "Ṥ" # U1e64 - : "ṥ" # U1e65 - : "ẛ" # U1e9b - : "Ṥ" # U1e64 - : "Ṧ" # U1e66 - : "ṥ" # U1e65 - : "ṧ" # U1e67 - : "⊙" # U2299 - : "Ṩ" # U1e68 - : "ṩ" # U1e69 - : "Ṥ" # U1e64 - : "ṥ" # U1e65 - : "Ṧ" # U1e66 - : "ṧ" # U1e67 - : "Ṩ" # U1e68 - : "ṩ" # U1e69 - : "⌿" # U233f - : "\" # U5c - : "\" # U5c - : "≠" # U2260 - : "₡" # U20a1 - : "Đ" # U110 - : "Ǥ" # U1e4 - : "Ħ" # U126 - : "Ɨ" # U197 - : "Ł" # U141 - : "Ø" # Ud8 - : "Ŧ" # U166 - : "µ" # Ub5 - : "Ƶ" # U1b5 - : "|" # U7c - : "ƀ" # U180 - : "¢" # Ua2 - : "đ" # U111 - : "ǥ" # U1e5 - : "ħ" # U127 - : "ɨ" # U268 - : "ł" # U142 - : "₥" # U20a5 - : "ø" # Uf8 - : "ŧ" # U167 - : "µ" # Ub5 - : "√" # U221a - : "ƶ" # U1b6 - : "ʡ" # U2a1 - : "Ұ" # U4b0 - : "ұ" # U4b1 - : "ғ" # U493 - : "ҟ" # U49f - : "Ғ" # U492 - : "Ҟ" # U49e - : "↚" # U219a - : "↛" # U219b - : "↮" # U21ae - : "⍁" # U2341 - : "°" # Ub0 - : "↉" # U2189 - : "©" # Ua9 - : "§" # Ua7 - : "¤" # Ua4 - : "°" # Ub0 - : "©" # Ua9 - : "§" # Ua7 - : "¤" # Ua4 - : "⍬" # U236c - : "⅒" # U2152 - : "½" # Ubd - : "⅓" # U2153 - : "¼" # Ubc - : "⅕" # U2155 - : "⅙" # U2159 - : "⅐" # U2150 - : "⅛" # U215b - : "⅑" # U2151 - : "¹" # Ub9 - : "¹" # Ub9 - : "¹" # Ub9 - : "⅔" # U2154 - : "⅖" # U2156 - : "²" # Ub2 - : "²" # Ub2 - : "²" # Ub2 - : "¾" # Ube - : "⅗" # U2157 - : "⅜" # U215c - : "³" # Ub3 - : "³" # Ub3 - : "³" # Ub3 - : "⅘" # U2158 - : "⅚" # U215a - : "⅝" # U215d - : "⅞" # U215e - : "∞" # U221e - : "☹" # U2639 - : "☺" # U263a - : "÷" # Uf7 - : "∴" # U2234 - : "⍠" # U2360 - : "Ą" # U104 - : "Ę" # U118 - : "Į" # U12e - : "Ǫ" # U1ea - : "Ș" # U218 - : "Ț" # U21a - : "Ų" # U172 - : "⍮" # U236e - : "ą" # U105 - : "ę" # U119 - : "į" # U12f - : "ǫ" # U1eb - : "ș" # U219 - : "ț" # U21b - : "ų" # U173 - : "ˇ" # U2c7 - : "“" # U201c - : "‘" # U2018 - : "←" # U2190 - : "\" # U5c - : "♥" # U2665 - : "«" # Uab - : "≤" # U2264 - : "⋄" # U22c4 - : "Č" # U10c - : "Ď" # U10e - : "Ě" # U11a - : "Ľ" # U13d - : "Ň" # U147 - : "Ř" # U158 - : "Š" # U160 - : "Ť" # U164 - : "Ž" # U17d - : "≤" # U2264 - : "č" # U10d - : "ď" # U10f - : "ě" # U11b - : "ľ" # U13e - : "ň" # U148 - : "ř" # U159 - : "š" # U161 - : "ť" # U165 - : "ž" # U17e - : "≮" # U226e - : "⍃" # U2343 - : "≠" # U2260 - : "⇒" # U21d2 - : "€" # U20ac - : "€" # U20ac - : "₤" # U20a4 - : "₦" # U20a6 - : "Ő" # U150 - : "₽" # U20bd - : "₹" # U20b9 - : "Ű" # U170 - : "₩" # U20a9 - : "¥" # Ua5 - : "≡" # U2261 - : "€" # U20ac - : "₫" # U20ab - : "€" # U20ac - : "£" # Ua3 - : "ő" # U151 - : "₽" # U20bd - : "₹" # U20b9 - : "ű" # U171 - : "¥" # Ua5 - : "≠" # U2260 - : "ӳ" # U4f3 - : "₽" # U20bd - : "€" # U20ac - : "€" # U20ac - : "Ӳ" # U4f2 - : "₽" # U20bd - : "⌸" # U2338 - : "^" # U5e - : "”" # U201d - : "’" # U2019 - : "⋄" # U22c4 - : "≥" # U2265 - : "»" # Ubb - : "Â" # Uc2 - : "Ê" # Uca - : "Î" # Uce - : "Ô" # Ud4 - : "Û" # Udb - : "≥" # U2265 - : "â" # Ue2 - : "ê" # Uea - : "î" # Uee - : "ô" # Uf4 - : "û" # Ufb - : "⍩" # U2369 - : "≯" # U226f - : "⍄" # U2344 - : "⸘" # U2e18 - : "Ở" # U1ede - : "Ử" # U1eec - : "ở" # U1edf - : "ử" # U1eed - : "¿" # Ubf - : "Ả" # U1ea2 - : "Ẻ" # U1eba - : "Ỉ" # U1ec8 - : "Ỏ" # U1ece - : "Ủ" # U1ee6 - : "Ỷ" # U1ef6 - : "Ẩ" # U1ea8 - : "Ể" # U1ec2 - : "Ổ" # U1ed4 - : "ẩ" # U1ea9 - : "ể" # U1ec3 - : "ổ" # U1ed5 - : "ả" # U1ea3 - : "Ẳ" # U1eb2 - : "ẳ" # U1eb3 - : "ẻ" # U1ebb - : "ỉ" # U1ec9 - : "ỏ" # U1ecf - : "ủ" # U1ee7 - : "ỷ" # U1ef7 - : "Ẩ" # U1ea8 - : "Ể" # U1ec2 - : "Ổ" # U1ed4 - : "ẩ" # U1ea9 - : "ể" # U1ec3 - : "ổ" # U1ed5 - : "Ẳ" # U1eb2 - : "ẳ" # U1eb3 - : "⍰" # U2370 - : "Ẩ" # U1ea8 - : "Ể" # U1ec2 - : "Ổ" # U1ed4 - : "ẩ" # U1ea9 - : "ể" # U1ec3 - : "ổ" # U1ed5 - : "Ẳ" # U1eb2 - : "ẳ" # U1eb3 - : "Ở" # U1ede - : "Ử" # U1eec - : "ở" # U1edf - : "ử" # U1eed - : "Ä" # Uc4 - : "Á" # Uc1 - : "Ă" # U102 - : "Å" # Uc5 - : "Ą" # U104 - : "Ã" # Uc3 - : "Ą" # U104 - : "Â" # Uc2 - : "Å" # Uc5 - : "Æ" # Uc6 - : "@" # U40 - : "Â" # Uc2 - : "ª" # Uaa - : "À" # Uc0 - : "Ã" # Uc3 - : "Ä" # Uc4 - : "Á" # Uc1 - : "Ḃ" # U1e02 - : "Ć" # U106 - : "Ç" # Uc7 - : "Ċ" # U10a - : "₡" # U20a1 - : "©" # Ua9 - : "Č" # U10c - : "€" # U20ac : "☭" # U262d - : "₠" # U20a0 - : "©" # Ua9 - : "©" # Ua9 - : "₢" # U20a2 - : "¢" # Ua2 - : "Ḑ" # U1e10 - : "Đ" # U110 - : "Ḋ" # U1e0a - : "Ď" # U10e - : "Ð" # Ud0 - : "Ë" # Ucb - : "É" # Uc9 - : "Ę" # U118 - : "Ē" # U112 - : "Ė" # U116 - : "Ę" # U118 - : "Ě" # U11a - : "€" # U20ac - : "Ê" # Uca - : "Ê" # Uca - : "Ē" # U112 - : "È" # Uc8 - : "Ë" # Ucb - : "É" # Uc9 - : "Ḟ" # U1e1e - : "ffi" # Ufb03 - : "ffl" # Ufb04 - : "₣" # U20a3 - : "Ğ" # U11e - : "Ģ" # U122 - : "Ġ" # U120 - : ">" # U3e - : "Ğ" # U11e - : "Ğ" # U11e - : "Ğ" # U11e - : "Ḩ" # U1e28 - : "Ï" # Ucf - : "Í" # Ucd - : "Į" # U12e - : "Ī" # U12a - : "İ" # U130 - : "Į" # U12e - : "Î" # Uce - : "IJ" # U132 - : "Î" # Uce - : "Ī" # U12a - : "Ì" # Ucc - : "IJ" # U132 - : "Ĩ" # U128 - : "Ï" # Ucf - : "Í" # Ucd - : "Ķ" # U136 - : "Ĺ" # U139 - : "Ļ" # U13b - : "£" # Ua3 - : "Ł" # U141 - : "Ľ" # U13d - : "£" # Ua3 - : "<" # U3c - : "|" # U7c - : "Ṁ" # U1e40 - : "Ń" # U143 - : "Ņ" # U145 - : "Ñ" # Ud1 - : "Ň" # U147 - : "₦" # U20a6 - : "Ŋ" # U14a - : "№" # U2116 - : "№" # U2116 - : "Ñ" # Ud1 - : "Ö" # Ud6 - : "Ó" # Ud3 - : "Ǫ" # U1ea - : "Õ" # Ud5 - : "Ø" # Ud8 - : "Ǫ" # U1ea - : "Ô" # Ud4 - : "Ⓐ" # U24b6 - : "©" # Ua9 - : "Œ" # U152 - : "®" # Uae - : "§" # Ua7 - : "¤" # Ua4 - : "Ô" # Ud4 - : "º" # Uba - : "Ò" # Ud2 - : "©" # Ua9 - : "®" # Uae - : "¤" # Ua4 - : "Õ" # Ud5 - : "Ö" # Ud6 - : "Ó" # Ud3 - : "¶" # Ub6 - : "Ṗ" # U1e56 - : "₽" # U20bd - : "¶" # Ub6 - : "₧" # U20a7 - : "Ŕ" # U154 - : "Ŗ" # U156 - : "Ř" # U158 - : "₹" # U20b9 - : "®" # Uae - : "®" # Uae - : "₨" # U20a8 - : "§" # Ua7 - : "Ś" # U15a - : "Ş" # U15e - : "Ṡ" # U1e60 - : "§" # Ua7 - : "¹" # Ub9 - : "²" # Ub2 - : "³" # Ub3 - : "Ș" # U218 - : "Š" # U160 - : "℠" # U2120 - : "§" # Ua7 - : "ẞ" # U1e9e - : "℠" # U2120 - : "Ş" # U15e - : "Ţ" # U162 - : "Ŧ" # U166 - : "Ṫ" # U1e6a - : "Ŧ" # U166 - : "Ț" # U21a - : "Ť" # U164 - : "Þ" # Ude - : "™" # U2122 - : "™" # U2122 + : "🖖" # U1f596 : "Ḝ" # U1e1c : "ḝ" # U1e1d - : "Ặ" # U1eb6 - : "ặ" # U1eb7 - : "Ü" # Udc - : "Ú" # Uda - : "Ů" # U16e - : "Ų" # U172 - : "Ū" # U16a - : "µ" # Ub5 - : "Ų" # U172 - : "Û" # Udb - : "Ă" # U102 - : "Ĕ" # U114 - : "Ğ" # U11e - : "Ĭ" # U12c - : "Ŏ" # U14e - : "Ŭ" # U16c - : "Û" # Udb - : "Ū" # U16a - : "Ù" # Ud9 - : "ă" # U103 - : "ĕ" # U115 - : "ğ" # U11f - : "ĭ" # U12d - : "ŏ" # U14f - : "ŭ" # U16d - : "Ũ" # U168 - : "Ü" # Udc - : "Ú" # Uda - : "Ḝ" # U1e1c - : "ḝ" # U1e1d - : "Ḝ" # U1e1c - : "ḝ" # U1e1d - : "ӑ" # U4d1 - : "ӗ" # U4d7 - : "й" # U439 - : "ў" # U45e - : "ӂ" # U4c2 - : "Ӑ" # U4d0 - : "Ӗ" # U4d6 - : "Й" # U419 - : "Ў" # U40e - : "Ӂ" # U4c1 - : "Ᾰ" # U1fb8 - : "Ῐ" # U1fd8 - : "Ῠ" # U1fe8 - : "ᾰ" # U1fb0 - : "ῐ" # U1fd0 - : "ῠ" # U1fe0 - : "Ặ" # U1eb6 - : "ặ" # U1eb7 - : "Ḝ" # U1e1c - : "ḝ" # U1e1d - : "Ặ" # U1eb6 - : "ặ" # U1eb7 - : "|" # U7c - : "₩" # U20a9 - : "Ŵ" # U174 - : "¤" # Ua4 - : "¤" # Ua4 - : "¤" # Ua4 - : "Ÿ" # U178 - : "Ý" # Udd - : "¥" # Ua5 - : "¥" # Ua5 - : "Ŷ" # U176 - : "Ÿ" # U178 - : "Ý" # Udd - : "Ź" # U179 - : "Ż" # U17b - : "Ž" # U17d - : "⌷" # U2337 - : "⍀" # U2340 - : "⍉" # U2349 - : "⍂" # U2342 - : "⌷" # U2337 - : "^" # U5e - : "Ậ" # U1eac - : "Ệ" # U1ec6 - : "Ộ" # U1ed8 - : "ậ" # U1ead - : "ệ" # U1ec7 - : "ộ" # U1ed9 - : "⁽" # U207d - : "⁾" # U207e - : "⁺" # U207a - : "¯" # Uaf - : "·" # Ub7 - : "|" # U7c - : "⁰" # U2070 - : "¹" # Ub9 - : "²" # Ub2 - : "³" # Ub3 - : "⁴" # U2074 - : "⁵" # U2075 - : "⁶" # U2076 - : "⁷" # U2077 - : "⁸" # U2078 - : "⁹" # U2079 - : "⁼" # U207c - : "Â" # Uc2 - : "Ĉ" # U108 - : "Ê" # Uca - : "Ĝ" # U11c - : "Ĥ" # U124 - : "Î" # Uce - : "Ĵ" # U134 - : "Ô" # Ud4 - : "Ŝ" # U15c - : "Û" # Udb - : "Ŵ" # U174 - : "Ŷ" # U176 - : "Ẑ" # U1e90 - : "¯" # Uaf - : "ª" # Uaa - : "ʰ" # U2b0 - : "ⁱ" # U2071 - : "ʲ" # U2b2 - : "ˡ" # U2e1 - : "ⁿ" # U207f - : "º" # Uba - : "ʳ" # U2b3 - : "ˢ" # U2e2 - : "ʷ" # U2b7 - : "ˣ" # U2e3 - : "ʸ" # U2b8 - : "ˠ" # U2e0 - : "ʱ" # U2b1 - : "ʴ" # U2b4 - : "ʵ" # U2b5 - : "ʶ" # U2b6 - : "ˤ" # U2e4 - : "â" # Ue2 - : "ĉ" # U109 - : "ê" # Uea - : "ĝ" # U11d - : "ĥ" # U125 - : "î" # Uee - : "ĵ" # U135 - : "ô" # Uf4 - : "ŝ" # U15d - : "û" # Ufb - : "ŵ" # U175 - : "ŷ" # U177 - : "ẑ" # U1e91 - : "↑" # U2191 - : "ª" # Uaa - : "ʰ" # U2b0 - : "ⁱ" # U2071 - : "ʲ" # U2b2 - : "ˡ" # U2e1 - : "ⁿ" # U207f - : "º" # Uba - : "ʳ" # U2b3 - : "ˢ" # U2e2 - : "ʷ" # U2b7 - : "ˣ" # U2e3 - : "ʸ" # U2b8 - : "ˠ" # U2e0 - : "ʱ" # U2b1 - : "ʴ" # U2b4 - : "ʵ" # U2b5 - : "ʶ" # U2b6 - : "ˤ" # U2e4 - : "Ậ" # U1eac - : "ậ" # U1ead - : "Ệ" # U1ec6 - : "ệ" # U1ec7 - : "Ộ" # U1ed8 - : "ộ" # U1ed9 - : "⁻" # U207b - : "㆒" # U3192 - : "㆜" # U319c - : "㆔" # U3194 - : "㆖" # U3196 - : "㆘" # U3198 - : "㆛" # U319b - : "㆗" # U3197 - : "㆚" # U319a - : "㆓" # U3193 - : "㆟" # U319f - : "㆕" # U3195 - : "㆞" # U319e - : "㆝" # U319d - : "㆙" # U3199 - : "Ậ" # U1eac - : "Ệ" # U1ec6 - : "Ộ" # U1ed8 - : "ậ" # U1ead - : "ệ" # U1ec7 - : "ộ" # U1ed9 - : "²" # Ub2 - : "⁺" # U207a - : "⁰" # U2070 - : "¹" # Ub9 - : "²" # Ub2 - : "³" # Ub3 - : "⁴" # U2074 - : "⁵" # U2075 - : "⁶" # U2076 - : "⁷" # U2077 - : "⁸" # U2078 - : "⁹" # U2079 - : "⁼" # U207c - : "Ḹ" # U1e38 - : "Ṝ" # U1e5c - : "ḹ" # U1e39 - : "ṝ" # U1e5d - : "Ǟ" # U1de - : "Ȫ" # U22a - : "Ǖ" # U1d5 - : "ǟ" # U1df - : "ȫ" # U22b - : "ǖ" # U1d6 - : "⍘" # U2358 - : "₍" # U208d - : "₎" # U208e - : "₊" # U208a - : "Ǡ" # U1e0 - : "Ȱ" # U230 - : "ǡ" # U1e1 - : "ȱ" # U231 - : "₀" # U2080 - : "₁" # U2081 - : "₂" # U2082 - : "₃" # U2083 - : "₄" # U2084 - : "₅" # U2085 - : "₆" # U2086 - : "₇" # U2087 - : "₈" # U2088 - : "₉" # U2089 - : "Ǭ" # U1ec - : "ǭ" # U1ed - : "≤" # U2264 - : "₌" # U208c - : "≥" # U2265 - : "Ā" # U100 - : "Ē" # U112 - : "Ḡ" # U1e20 - : "Ī" # U12a - : "Ō" # U14c - : "Ū" # U16a - : "Ȳ" # U232 - : "¯" # Uaf - : "¯" # Uaf - : "ā" # U101 - : "ē" # U113 - : "ḡ" # U1e21 - : "ī" # U12b - : "ō" # U14d - : "ū" # U16b - : "ȳ" # U233 - : "Ȭ" # U22c - : "ȭ" # U22d - : "Ǟ" # U1de - : "Ǣ" # U1e2 - : "Ȭ" # U22c - : "Ȫ" # U22a - : "Ǖ" # U1d5 - : "ǟ" # U1df - : "ǣ" # U1e3 - : "ȭ" # U22d - : "ȫ" # U22b - : "ǖ" # U1d6 - : "Ǭ" # U1ec - : "ǭ" # U1ed - : "Ǡ" # U1e0 - : "ǡ" # U1e1 - : "Ȱ" # U230 - : "ȱ" # U231 - : "ӣ" # U4e3 - : "ӯ" # U4ef - : "Ӣ" # U4e2 - : "Ӯ" # U4ee - : "Ᾱ" # U1fb9 - : "Ῑ" # U1fd9 - : "Ῡ" # U1fe9 - : "ᾱ" # U1fb1 - : "ῑ" # U1fd1 - : "ῡ" # U1fe1 - : "⍜" # U235c - : "⍊" # U234a - : "Ḹ" # U1e38 - : "ḹ" # U1e39 - : "Ṝ" # U1e5c - : "ṝ" # U1e5d - : "⍙" # U2359 - : "⍷" # U2377 - : "₋" # U208b - : "⍛" # U235b - : "≢" # U2262 - : "⊆" # U2286 - : "⊇" # U2287 - : "⍚" # U235a - : "⍸" # U2378 - : "⍹" # U2379 - : "⍶" # U2376 - : "Ȭ" # U22c - : "ȭ" # U22d - : "Ǡ" # U1e0 - : "Ȱ" # U230 - : "ǡ" # U1e1 - : "ȱ" # U231 - : "Ǟ" # U1de - : "Ȫ" # U22a - : "Ǖ" # U1d5 - : "ǟ" # U1df - : "ȫ" # U22b - : "ǖ" # U1d6 - : "Ǭ" # U1ec - : "ǭ" # U1ed - : "Ḹ" # U1e38 - : "Ṝ" # U1e5c - : "ḹ" # U1e39 - : "ṝ" # U1e5d - : "₂" # U2082 - : "₊" # U208a - : "₀" # U2080 - : "₁" # U2081 - : "₂" # U2082 - : "₃" # U2083 - : "₄" # U2084 - : "₅" # U2085 - : "₆" # U2086 - : "₇" # U2087 - : "₈" # U2088 - : "₉" # U2089 - : "₌" # U208c - : "`" # U60 - : "Ǜ" # U1db - : "ǜ" # U1dc - : "ῒ" # U1fd2 - : "ῢ" # U1fe2 - : "Ἃ" # U1f0b - : "Ἓ" # U1f1b - : "Ἣ" # U1f2b - : "Ἳ" # U1f3b - : "Ὃ" # U1f4b - : "Ὓ" # U1f5b - : "Ὣ" # U1f6b - : "ἃ" # U1f03 - : "ἓ" # U1f13 - : "ἣ" # U1f23 - : "ἳ" # U1f33 - : "ὃ" # U1f43 - : "ὓ" # U1f53 - : "ὣ" # U1f63 - : "Ἂ" # U1f0a - : "Ἒ" # U1f1a - : "Ἢ" # U1f2a - : "Ἲ" # U1f3a - : "Ὂ" # U1f4a - : "Ὢ" # U1f6a - : "ἂ" # U1f02 - : "ἒ" # U1f12 - : "ἢ" # U1f22 - : "ἲ" # U1f32 - : "ὂ" # U1f42 - : "ὒ" # U1f52 - : "ὢ" # U1f62 - : "Ờ" # U1edc - : "Ừ" # U1eea - : "ờ" # U1edd - : "ừ" # U1eeb - : "À" # Uc0 - : "È" # Uc8 - : "Ì" # Ucc - : "Ǹ" # U1f8 - : "Ò" # Ud2 - : "Ù" # Ud9 - : "Ẁ" # U1e80 - : "Ỳ" # U1ef2 - : "Ầ" # U1ea6 - : "Ề" # U1ec0 - : "Ồ" # U1ed2 - : "ầ" # U1ea7 - : "ề" # U1ec1 - : "ồ" # U1ed3 - : "Ḕ" # U1e14 - : "Ṑ" # U1e50 - : "ḕ" # U1e15 - : "ṑ" # U1e51 - : "à" # Ue0 - : "Ằ" # U1eb0 - : "ằ" # U1eb1 - : "è" # Ue8 - : "ì" # Uec - : "ǹ" # U1f9 - : "ò" # Uf2 - : "ù" # Uf9 - : "ẁ" # U1e81 - : "ỳ" # U1ef3 - : "Ḕ" # U1e14 - : "Ṑ" # U1e50 - : "ḕ" # U1e15 - : "ṑ" # U1e51 - : "Ầ" # U1ea6 - : "Ề" # U1ec0 - : "Ồ" # U1ed2 - : "Ǜ" # U1db - : "ầ" # U1ea7 - : "ề" # U1ec1 - : "ồ" # U1ed3 - : "ǜ" # U1dc - : "Ằ" # U1eb0 - : "ằ" # U1eb1 - : "Ḕ" # U1e14 - : "ḕ" # U1e15 - : "Ṑ" # U1e50 - : "ṑ" # U1e51 - : "ѐ" # U450 - : "ѝ" # U45d - : "Ѐ" # U400 - : "Ѝ" # U40d - : "ῒ" # U1fd2 - : "ῢ" # U1fe2 - : "Ὰ" # U1fba - : "Ὲ" # U1fc8 - : "Ὴ" # U1fca - : "Ὶ" # U1fda - : "Ὸ" # U1ff8 - : "Ὺ" # U1fea - : "Ὼ" # U1ffa - : "ὰ" # U1f70 - : "ὲ" # U1f72 - : "ὴ" # U1f74 - : "ὶ" # U1f76 - : "ὸ" # U1f78 - : "ὺ" # U1f7a - : "ὼ" # U1f7c - : "ἂ" # U1f02 - : "ἃ" # U1f03 - : "Ἂ" # U1f0a - : "Ἃ" # U1f0b - : "ἒ" # U1f12 - : "ἓ" # U1f13 - : "Ἒ" # U1f1a - : "Ἓ" # U1f1b - : "ἢ" # U1f22 - : "ἣ" # U1f23 - : "Ἢ" # U1f2a - : "Ἣ" # U1f2b - : "ἲ" # U1f32 - : "ἳ" # U1f33 - : "Ἲ" # U1f3a - : "Ἳ" # U1f3b - : "ὂ" # U1f42 - : "ὃ" # U1f43 - : "Ὂ" # U1f4a - : "Ὃ" # U1f4b - : "ὒ" # U1f52 - : "ὓ" # U1f53 - : "Ὓ" # U1f5b - : "ὢ" # U1f62 - : "ὣ" # U1f63 - : "Ὢ" # U1f6a - : "Ὣ" # U1f6b - : "Ầ" # U1ea6 - : "Ề" # U1ec0 - : "Ồ" # U1ed2 - : "ầ" # U1ea7 - : "ề" # U1ec1 - : "ồ" # U1ed3 - : "Ḕ" # U1e14 - : "Ṑ" # U1e50 - : "ḕ" # U1e15 - : "ṑ" # U1e51 - : "Ằ" # U1eb0 - : "ằ" # U1eb1 - : "Ǜ" # U1db - : "ǜ" # U1dc - : "ῒ" # U1fd2 - : "ῢ" # U1fe2 - : "Ờ" # U1edc - : "Ừ" # U1eea - : "ờ" # U1edd - : "ừ" # U1eeb - : "Ἂ" # U1f0a - : "Ἒ" # U1f1a - : "Ἢ" # U1f2a - : "Ἲ" # U1f3a - : "Ὂ" # U1f4a - : "Ὢ" # U1f6a - : "ἂ" # U1f02 - : "ἒ" # U1f12 - : "ἢ" # U1f22 - : "ἲ" # U1f32 - : "ὂ" # U1f42 - : "ὒ" # U1f52 - : "ὢ" # U1f62 - : "Ἃ" # U1f0b - : "Ἓ" # U1f1b - : "Ἣ" # U1f2b - : "Ἳ" # U1f3b - : "Ὃ" # U1f4b - : "Ὓ" # U1f5b - : "Ὣ" # U1f6b - : "ἃ" # U1f03 - : "ἓ" # U1f13 - : "ἣ" # U1f23 - : "ἳ" # U1f33 - : "ὃ" # U1f43 - : "ὓ" # U1f53 - : "ὣ" # U1f63 - : "ä" # Ue4 - : "á" # Ue1 - : "ă" # U103 - : "å" # Ue5 - : "ą" # U105 - : "ā" # U101 - : "ą" # U105 - : "â" # Ue2 - : "â" # Ue2 - : "ª" # Uaa - : "à" # Ue0 - : "å" # Ue5 - : "æ" # Ue6 - : "ã" # Ue3 - : "ä" # Ue4 - : "á" # Ue1 - : "Ặ" # U1eb6 - : "ặ" # U1eb7 - : "Ḝ" # U1e1c - : "ḝ" # U1e1d - : "ḃ" # U1e03 - : "Ă" # U102 - : "Ĕ" # U114 - : "Ğ" # U11e - : "Ĭ" # U12c - : "Ŏ" # U14e - : "Ŭ" # U16c - : "ă" # U103 - : "ĕ" # U115 - : "ğ" # U11f - : "ĭ" # U12d - : "ŏ" # U14f - : "ŭ" # U16d - : "Ḝ" # U1e1c - : "ḝ" # U1e1d - : "Ḝ" # U1e1c - : "ḝ" # U1e1d - : "ӑ" # U4d1 - : "ӗ" # U4d7 - : "й" # U439 - : "ў" # U45e - : "ӂ" # U4c2 - : "Ӑ" # U4d0 - : "Ӗ" # U4d6 - : "Й" # U419 - : "Ў" # U40e - : "Ӂ" # U4c1 - : "Ᾰ" # U1fb8 - : "Ῐ" # U1fd8 - : "Ῠ" # U1fe8 - : "ᾰ" # U1fb0 - : "ῐ" # U1fd0 - : "ῠ" # U1fe0 - : "Ặ" # U1eb6 - : "ặ" # U1eb7 - : "Ḝ" # U1e1c - : "ḝ" # U1e1d - : "Ặ" # U1eb6 - : "ặ" # U1eb7 - : "Ǚ" # U1d9 - : "ǚ" # U1da - : "ć" # U107 - : "ç" # Ue7 - : "ċ" # U10b - : "¢" # Ua2 - : "©" # Ua9 - : "č" # U10d - : "€" # U20ac - : "Ǎ" # U1cd - : "Č" # U10c - : "Ď" # U10e - : "Ě" # U11a - : "Ǧ" # U1e6 - : "Ȟ" # U21e - : "Ǐ" # U1cf - : "Ǩ" # U1e8 - : "Ľ" # U13d - : "Ň" # U147 - : "Ǒ" # U1d1 - : "Ř" # U158 - : "Š" # U160 - : "Ť" # U164 - : "Ǔ" # U1d3 - : "Ž" # U17d - : "ǎ" # U1ce - : "č" # U10d - : "ď" # U10f - : "ě" # U11b - : "ǧ" # U1e7 - : "ȟ" # U21f - : "ǐ" # U1d0 - : "ǰ" # U1f0 - : "ǩ" # U1e9 - : "ľ" # U13e - : "ň" # U148 - : "ǒ" # U1d2 - : "ř" # U159 - : "š" # U161 - : "ť" # U165 - : "ǔ" # U1d4 - : "ž" # U17e - : "¢" # Ua2 - : "Ǚ" # U1d9 - : "ǚ" # U1da - : "Ǚ" # U1d9 - : "ǚ" # U1da - : "ḑ" # U1e11 - : "đ" # U111 - : "ḋ" # U1e0b - : "ď" # U10f - : "₫" # U20ab - : "ð" # Uf0 - : "⌀" # U2300 - : "ë" # Ueb - : "é" # Ue9 - : "ę" # U119 - : "ē" # U113 - : "ė" # U117 - : "ę" # U119 - : "ě" # U11b - : "€" # U20ac - : "ê" # Uea - : "ê" # Uea - : "ē" # U113 - : "è" # Ue8 - : "ə" # U259 - : "ë" # Ueb - : "é" # Ue9 - : "ḟ" # U1e1f - : "ſ" # U17f - : "ff" # Ufb00 - : "fi" # Ufb01 - : "fl" # Ufb02 - : "ſ" # U17f - : "ğ" # U11f - : "ģ" # U123 - : "ġ" # U121 - : "ğ" # U11f - : ">" # U3e - : "ğ" # U11f - : "ğ" # U11f - : "ḩ" # U1e29 - : "ï" # Uef - : "í" # Ued - : "į" # U12f - : "ī" # U12b - : "ı" # U131 - : "į" # U12f - : "î" # Uee - : "î" # Uee - : "ī" # U12b - : "ì" # Uec - : "ij" # U133 - : "ĩ" # U129 - : "ï" # Uef - : "í" # Ued - : "ķ" # U137 - : "ĸ" # U138 - : "ĺ" # U13a - : "ļ" # U13c - : "£" # Ua3 - : "ł" # U142 - : "ľ" # U13e - : "£" # Ua3 - : "<" # U3c - : "|" # U7c - : "ṁ" # U1e41 - : "₥" # U20a5 - : "µ" # Ub5 - : "ń" # U144 - : "ņ" # U146 - : "ñ" # Uf1 - : "ň" # U148 - : "ŋ" # U14b - : "ñ" # Uf1 - : "ö" # Uf6 - : "ó" # Uf3 - : "ǫ" # U1eb - : "ō" # U14d - : "ø" # Uf8 - : "ǫ" # U1eb - : "ô" # Uf4 - : "Å" # Uc5 - : "©" # Ua9 - : "®" # Uae - : "Ů" # U16e - : "¤" # Ua4 - : "ô" # Uf4 - : "º" # Uba - : "ò" # Uf2 - : "å" # Ue5 - : "©" # Ua9 - : "œ" # U153 - : "°" # Ub0 - : "®" # Uae - : "§" # Ua7 - : "ů" # U16f - : "ẘ" # U1e98 - : "¤" # Ua4 - : "ẙ" # U1e99 - : "õ" # Uf5 - : "ö" # Uf6 - : "ó" # Uf3 - : "¶" # Ub6 - : "ṗ" # U1e57 - : "₽" # U20bd - : "ŕ" # U155 - : "ŗ" # U157 - : "ř" # U159 - : "₹" # U20b9 - : "§" # Ua7 - : "ś" # U15b - : "ş" # U15f - : "ṡ" # U1e61 - : "§" # Ua7 - : "¹" # Ub9 - : "²" # Ub2 - : "³" # Ub3 - : "ș" # U219 - : "š" # U161 - : "℠" # U2120 - : "℠" # U2120 - : "§" # Ua7 - : "ß" # Udf - : "ş" # U15f - : "ţ" # U163 - : "ŧ" # U167 - : "ṫ" # U1e6b - : "ŧ" # U167 - : "ț" # U21b - : "ť" # U165 - : "™" # U2122 - : "þ" # Ufe - : "™" # U2122 - : "ü" # Ufc - : "ú" # Ufa - : "ů" # U16f - : "ų" # U173 - : "ū" # U16b - : "µ" # Ub5 - : "ų" # U173 - : "û" # Ufb - : "Ă" # U102 - : "Ĕ" # U114 - : "Ğ" # U11e - : "Ĭ" # U12c - : "Ŏ" # U14e - : "Ŭ" # U16c - : "û" # Ufb - : "ū" # U16b - : "ù" # Uf9 - : "ă" # U103 - : "ĕ" # U115 - : "ğ" # U11f - : "ĭ" # U12d - : "ŏ" # U14f - : "ŭ" # U16d - : "ũ" # U169 - : "ü" # Ufc - : "ú" # Ufa - : "√" # U221a - : "Ǎ" # U1cd - : "Č" # U10c - : "Ď" # U10e - : "Ě" # U11a - : "Ǧ" # U1e6 - : "Ȟ" # U21e - : "Ǐ" # U1cf - : "Ǩ" # U1e8 - : "Ň" # U147 - : "Ǒ" # U1d1 - : "Ř" # U158 - : "Š" # U160 - : "Ť" # U164 - : "Ǔ" # U1d3 - : "Ž" # U17d - : "ǎ" # U1ce - : "č" # U10d - : "ď" # U10f - : "ě" # U11b - : "ǧ" # U1e7 - : "ȟ" # U21f - : "ǐ" # U1d0 - : "ǰ" # U1f0 - : "ǩ" # U1e9 - : "|" # U7c - : "ň" # U148 - : "ǒ" # U1d2 - : "ř" # U159 - : "š" # U161 - : "ť" # U165 - : "ǔ" # U1d4 - : "ž" # U17e - : "↓" # U2193 - : "ŵ" # U175 - : "¤" # Ua4 - : "¤" # Ua4 - : "¤" # Ua4 - : "×" # Ud7 - : "ÿ" # Uff - : "ý" # Ufd - : "¥" # Ua5 - : "¥" # Ua5 - : "ŷ" # U177 - : "ÿ" # Uff - : "ý" # Ufd - : "ź" # U17a - : "ż" # U17c - : "ž" # U17e - : "∅" # U2205 - : "¢" # Ua2 - : "↑" # U2191 - : "¢" # Ua2 - : "↓" # U2193 - : "⍭" # U236d - : "⍦" # U2366 - : "⌽" # U233d - : "⍅" # U2345 - : "⍆" # U2346 - : "⍋" # U234b - : "⍒" # U2352 - : "⍧" # U2367 - : "~" # U7e - : "ῗ" # U1fd7 - : "ῧ" # U1fe7 - : "Ἇ" # U1f0f - : "Ἧ" # U1f2f - : "Ἷ" # U1f3f - : "Ὗ" # U1f5f - : "Ὧ" # U1f6f - : "ἇ" # U1f07 - : "ἧ" # U1f27 - : "ἷ" # U1f37 - : "ὗ" # U1f57 - : "ὧ" # U1f67 - : "Ἆ" # U1f0e - : "Ἦ" # U1f2e - : "Ἶ" # U1f3e - : "Ὦ" # U1f6e - : "ἆ" # U1f06 - : "ἦ" # U1f26 - : "ἶ" # U1f36 - : "ὖ" # U1f56 - : "ὦ" # U1f66 - : "Ỡ" # U1ee0 - : "Ữ" # U1eee - : "ỡ" # U1ee1 - : "ữ" # U1eef - : "⍬" # U236c - : "Ã" # Uc3 - : "Ẽ" # U1ebc - : "Ĩ" # U128 - : "Ñ" # Ud1 - : "Õ" # Ud5 - : "Ũ" # U168 - : "Ṽ" # U1e7c - : "Ỹ" # U1ef8 - : "Ẫ" # U1eaa - : "Ễ" # U1ec4 - : "Ỗ" # U1ed6 - : "ẫ" # U1eab - : "ễ" # U1ec5 - : "ỗ" # U1ed7 - : "ã" # Ue3 - : "Ẵ" # U1eb4 - : "ẵ" # U1eb5 - : "ẽ" # U1ebd - : "ĩ" # U129 - : "ñ" # Uf1 - : "õ" # Uf5 - : "ũ" # U169 - : "ṽ" # U1e7d - : "ỹ" # U1ef9 - : "⍭" # U236d - : "≈" # U2248 - : "⍨" # U2368 - : "Ẫ" # U1eaa - : "Ễ" # U1ec4 - : "Ỗ" # U1ed6 - : "ẫ" # U1eab - : "ễ" # U1ec5 - : "ỗ" # U1ed7 - : "Ẵ" # U1eb4 - : "ẵ" # U1eb5 - : "ῗ" # U1fd7 - : "ῧ" # U1fe7 - : "ᾶ" # U1fb6 - : "ῆ" # U1fc6 - : "ῖ" # U1fd6 - : "ῦ" # U1fe6 - : "ῶ" # U1ff6 - : "ἆ" # U1f06 - : "ἇ" # U1f07 - : "Ἆ" # U1f0e - : "Ἇ" # U1f0f - : "ἦ" # U1f26 - : "ἧ" # U1f27 - : "Ἦ" # U1f2e - : "Ἧ" # U1f2f - : "ἶ" # U1f36 - : "ἷ" # U1f37 - : "Ἶ" # U1f3e - : "Ἷ" # U1f3f - : "ὖ" # U1f56 - : "ὗ" # U1f57 - : "Ὗ" # U1f5f - : "ὦ" # U1f66 - : "ὧ" # U1f67 - : "Ὦ" # U1f6e - : "Ὧ" # U1f6f - : "⍫" # U236b - : "⍲" # U2372 - : "⍱" # U2371 - : "Ẫ" # U1eaa - : "Ễ" # U1ec4 - : "Ỗ" # U1ed6 - : "ẫ" # U1eab - : "ễ" # U1ec5 - : "ỗ" # U1ed7 - : "Ẵ" # U1eb4 - : "ẵ" # U1eb5 - : "ῗ" # U1fd7 - : "ῧ" # U1fe7 - : "Ỡ" # U1ee0 - : "Ữ" # U1eee - : "ỡ" # U1ee1 - : "ữ" # U1eef - : "Ἆ" # U1f0e - : "Ἦ" # U1f2e - : "Ἶ" # U1f3e - : "Ὦ" # U1f6e - : "ἆ" # U1f06 - : "ἦ" # U1f26 - : "ἶ" # U1f36 - : "ὖ" # U1f56 - : "ὦ" # U1f66 - : "Ἇ" # U1f0f - : "Ἧ" # U1f2f - : "Ἷ" # U1f3f - : "Ὗ" # U1f5f - : "Ὧ" # U1f6f - : "ἇ" # U1f07 - : "ἧ" # U1f27 - : "ἷ" # U1f37 - : "ὗ" # U1f57 - : "ὧ" # U1f67 - : "΅" # U385 - : "⍣" # U2363 - : "⍩" # U2369 - : "Ä" # Uc4 - : "Ë" # Ucb - : "Ï" # Ucf - : "Ö" # Ud6 - : "Ü" # Udc - : "Ÿ" # U178 - : "῭" # U1fed - : "ä" # Ue4 - : "ë" # Ueb - : "ï" # Uef - : "ö" # Uf6 - : "ü" # Ufc - : "ÿ" # Uff - : "῁" # U1fc1 - : "΅" # U385 - : "⍥" # U2365 - : "⍡" # U2361 - : "⍢" # U2362 - : "⍤" # U2364 - : "῭" # U1fed - : "΅" # U385 - : "῁" # U1fc1 - : "Ḹ" # U1e38 - : "Ṝ" # U1e5c - : "ḹ" # U1e39 - : "ṝ" # U1e5d - : "Ǟ" # U1de - : "Ȫ" # U22a - : "Ǖ" # U1d5 - : "ǟ" # U1df - : "ȫ" # U22b - : "ǖ" # U1d6 - : "Ǡ" # U1e0 - : "Ȱ" # U230 - : "ǡ" # U1e1 - : "ȱ" # U231 - : "Ǭ" # U1ec - : "ǭ" # U1ed - : "Ā" # U100 - : "Ē" # U112 - : "Ḡ" # U1e20 - : "Ī" # U12a - : "Ō" # U14c - : "Ū" # U16a - : "Ȳ" # U232 - : "ā" # U101 - : "ē" # U113 - : "ḡ" # U1e21 - : "ī" # U12b - : "ō" # U14d - : "ū" # U16b - : "ȳ" # U233 - : "Ȭ" # U22c - : "ȭ" # U22d - : "Ǟ" # U1de - : "Ǣ" # U1e2 - : "Ȭ" # U22c - : "Ȫ" # U22a - : "Ǖ" # U1d5 - : "ǟ" # U1df - : "ǣ" # U1e3 - : "ȭ" # U22d - : "ȫ" # U22b - : "ǖ" # U1d6 - : "Ǭ" # U1ec - : "ǭ" # U1ed - : "Ǡ" # U1e0 - : "ǡ" # U1e1 - : "Ȱ" # U230 - : "ȱ" # U231 - : "ӣ" # U4e3 - : "ӯ" # U4ef - : "Ӣ" # U4e2 - : "Ӯ" # U4ee - : "Ᾱ" # U1fb9 - : "Ῑ" # U1fd9 - : "Ῡ" # U1fe9 - : "ᾱ" # U1fb1 - : "ῑ" # U1fd1 - : "ῡ" # U1fe1 - : "⍑" # U2351 - : "Ḹ" # U1e38 - : "ḹ" # U1e39 - : "Ṝ" # U1e5c - : "ṝ" # U1e5d - : "Ȭ" # U22c - : "ȭ" # U22d - : "Ǡ" # U1e0 - : "Ȱ" # U230 - : "ǡ" # U1e1 - : "ȱ" # U231 - : "Ǟ" # U1de - : "Ȫ" # U22a - : "Ǖ" # U1d5 - : "ǟ" # U1df - : "ȫ" # U22b - : "ǖ" # U1d6 - : "Ǭ" # U1ec - : "ǭ" # U1ed - : "Ḹ" # U1e38 - : "Ṝ" # U1e5c - : "ḹ" # U1e39 - : "ṝ" # U1e5d - : "Ḯ" # U1e2e - : "Ǘ" # U1d7 - : "ḯ" # U1e2f - : "ǘ" # U1d8 - : "ΐ" # U390 - : "ΰ" # U3b0 - : "Ἅ" # U1f0d - : "Ἕ" # U1f1d - : "Ἥ" # U1f2d - : "Ἵ" # U1f3d - : "Ὅ" # U1f4d - : "Ὕ" # U1f5d - : "Ὥ" # U1f6d - : "ἅ" # U1f05 - : "ἕ" # U1f15 - : "ἥ" # U1f25 - : "ἵ" # U1f35 - : "ὅ" # U1f45 - : "ὕ" # U1f55 - : "ὥ" # U1f65 - : "Ἄ" # U1f0c - : "Ἔ" # U1f1c - : "Ἤ" # U1f2c - : "Ἴ" # U1f3c - : "Ὄ" # U1f4c - : "Ὤ" # U1f6c - : "ἄ" # U1f04 - : "ἔ" # U1f14 - : "ἤ" # U1f24 - : "ἴ" # U1f34 - : "ὄ" # U1f44 - : "ὔ" # U1f54 - : "ὤ" # U1f64 - : "Ớ" # U1eda - : "Ứ" # U1ee8 - : "ớ" # U1edb - : "ứ" # U1ee9 - : "Ḉ" # U1e08 - : "ḉ" # U1e09 - : "Ǿ" # U1fe - : "ǿ" # U1ff - : "Á" # Uc1 - : "Ć" # U106 - : "É" # Uc9 - : "Ǵ" # U1f4 - : "Í" # Ucd - : "Ḱ" # U1e30 - : "Ĺ" # U139 - : "Ḿ" # U1e3e - : "Ń" # U143 - : "Ó" # Ud3 - : "Ṕ" # U1e54 - : "Ŕ" # U154 - : "Ś" # U15a - : "Ú" # Uda - : "Ẃ" # U1e82 - : "Ý" # Udd - : "Ź" # U179 - : "Ấ" # U1ea4 - : "Ế" # U1ebe - : "Ố" # U1ed0 - : "ấ" # U1ea5 - : "ế" # U1ebf - : "ố" # U1ed1 - : "Ḗ" # U1e16 - : "Ṓ" # U1e52 - : "ḗ" # U1e17 - : "ṓ" # U1e53 - : "á" # Ue1 - : "Ắ" # U1eae - : "ắ" # U1eaf - : "ć" # U107 - : "é" # Ue9 - : "ǵ" # U1f5 - : "í" # Ued - : "ḱ" # U1e31 - : "ĺ" # U13a - : "ḿ" # U1e3f - : "ń" # U144 - : "ó" # Uf3 - : "ṕ" # U1e55 - : "ŕ" # U155 - : "ś" # U15b - : "ú" # Ufa - : "ẃ" # U1e83 - : "ý" # Ufd - : "ź" # U17a - : "Ṍ" # U1e4c - : "Ṹ" # U1e78 - : "ṍ" # U1e4d - : "ṹ" # U1e79 - : "Ḗ" # U1e16 - : "Ṓ" # U1e52 - : "ḗ" # U1e17 - : "ṓ" # U1e53 - : "Ḉ" # U1e08 - : "ḉ" # U1e09 - : "Ấ" # U1ea4 - : "Ǻ" # U1fa - : "Ǽ" # U1fc - : "Ḉ" # U1e08 - : "Ế" # U1ebe - : "Ḯ" # U1e2e - : "Ố" # U1ed0 - : "Ṍ" # U1e4c - : "Ǿ" # U1fe - : "Ǘ" # U1d7 - : "ấ" # U1ea5 - : "ǻ" # U1fb - : "ǽ" # U1fd - : "ḉ" # U1e09 - : "ế" # U1ebf - : "ḯ" # U1e2f - : "ố" # U1ed1 - : "ṍ" # U1e4d - : "ǿ" # U1ff - : "ǘ" # U1d8 - : "Ắ" # U1eae - : "ắ" # U1eaf - : "Ḗ" # U1e16 - : "ḗ" # U1e17 - : "Ṓ" # U1e52 - : "Ṹ" # U1e78 - : "ṓ" # U1e53 - : "ṹ" # U1e79 - : "ѓ" # U453 - : "ќ" # U45c - : "Ѓ" # U403 - : "Ќ" # U40c - : "ΐ" # U390 - : "ΰ" # U3b0 - : "Ά" # U386 - : "Έ" # U388 - : "Ή" # U389 - : "Ί" # U38a - : "Ό" # U38c - : "Ύ" # U38e - : "Ώ" # U38f - : "ά" # U3ac - : "έ" # U3ad - : "ή" # U3ae - : "ί" # U3af - : "ό" # U3cc - : "ύ" # U3cd - : "ώ" # U3ce - : "ἄ" # U1f04 - : "ἅ" # U1f05 - : "Ἄ" # U1f0c - : "Ἅ" # U1f0d - : "ἔ" # U1f14 - : "ἕ" # U1f15 - : "Ἔ" # U1f1c - : "Ἕ" # U1f1d - : "ἤ" # U1f24 - : "ἥ" # U1f25 - : "Ἤ" # U1f2c - : "Ἥ" # U1f2d - : "ἴ" # U1f34 - : "ἵ" # U1f35 - : "Ἴ" # U1f3c - : "Ἵ" # U1f3d - : "ὄ" # U1f44 - : "ὅ" # U1f45 - : "Ὄ" # U1f4c - : "Ὅ" # U1f4d - : "ὔ" # U1f54 - : "ὕ" # U1f55 - : "Ὕ" # U1f5d - : "ὤ" # U1f64 - : "ὥ" # U1f65 - : "Ὤ" # U1f6c - : "Ὥ" # U1f6d - : "Ấ" # U1ea4 - : "Ế" # U1ebe - : "Ố" # U1ed0 - : "ấ" # U1ea5 - : "ế" # U1ebf - : "ố" # U1ed1 - : "Ṍ" # U1e4c - : "Ṹ" # U1e78 - : "ṍ" # U1e4d - : "ṹ" # U1e79 - : "Ḗ" # U1e16 - : "Ṓ" # U1e52 - : "ḗ" # U1e17 - : "ṓ" # U1e53 - : "Ắ" # U1eae - : "ắ" # U1eaf - : "Ḯ" # U1e2e - : "Ǘ" # U1d7 - : "ḯ" # U1e2f - : "ǘ" # U1d8 - : "ΐ" # U390 - : "ΰ" # U3b0 - : "Ǻ" # U1fa - : "ǻ" # U1fb - : "Ḉ" # U1e08 - : "ḉ" # U1e09 - : "Ớ" # U1eda - : "Ứ" # U1ee8 - : "ớ" # U1edb - : "ứ" # U1ee9 - : "Ἄ" # U1f0c - : "Ἔ" # U1f1c - : "Ἤ" # U1f2c - : "Ἴ" # U1f3c - : "Ὄ" # U1f4c - : "Ὤ" # U1f6c - : "ἄ" # U1f04 - : "ἔ" # U1f14 - : "ἤ" # U1f24 - : "ἴ" # U1f34 - : "ὄ" # U1f44 - : "ὔ" # U1f54 - : "ὤ" # U1f64 - : "Ἅ" # U1f0d - : "Ἕ" # U1f1d - : "Ἥ" # U1f2d - : "Ἵ" # U1f3d - : "Ὅ" # U1f4d - : "Ὕ" # U1f5d - : "Ὥ" # U1f6d - : "ἅ" # U1f05 - : "ἕ" # U1f15 - : "ἥ" # U1f25 - : "ἵ" # U1f35 - : "ὅ" # U1f45 - : "ὕ" # U1f55 - : "ὥ" # U1f65 - : "Ǿ" # U1fe - : "ǿ" # U1ff - : "Ç" # Uc7 - : "Ḑ" # U1e10 - : "Ȩ" # U228 - : "Ģ" # U122 - : "Ḩ" # U1e28 - : "Ķ" # U136 - : "Ļ" # U13b - : "Ņ" # U145 - : "Ŗ" # U156 - : "Ş" # U15e - : "Ţ" # U162 - : "ç" # Ue7 - : "ḑ" # U1e11 - : "ȩ" # U229 - : "ģ" # U123 - : "ḩ" # U1e29 - : "ķ" # U137 - : "ļ" # U13c - : "ņ" # U146 - : "ŗ" # U157 - : "ş" # U15f - : "ţ" # U163 - : "⌹" # U2339 - : "Ğ" # U11e - : "ğ" # U11f - : "יִ" # Ufb1d - : "ײַ" # Ufb1f - : "אַ" # Ufb2e - : "אָ" # Ufb2f - : "וֹ" # Ufb4b - : "אּ" # Ufb30 - : "בּ" # Ufb31 - : "גּ" # Ufb32 - : "דּ" # Ufb33 - : "הּ" # Ufb34 - : "וּ" # Ufb35 - : "זּ" # Ufb36 - : "טּ" # Ufb38 - : "יּ" # Ufb39 - : "ךּ" # Ufb3a - : "כּ" # Ufb3b - : "לּ" # Ufb3c - : "מּ" # Ufb3e - : "נּ" # Ufb40 - : "סּ" # Ufb41 - : "ףּ" # Ufb43 - : "פּ" # Ufb44 - : "צּ" # Ufb46 - : "קּ" # Ufb47 - : "רּ" # Ufb48 - : "שּ" # Ufb49 - : "תּ" # Ufb4a - : "בֿ" # Ufb4c - : "כֿ" # Ufb4d - : "פֿ" # Ufb4e - : "שּׁ" # Ufb2c - : "שׁ" # Ufb2a - : "שּׁ" # Ufb2c - : "שּׂ" # Ufb2d - : "שׂ" # Ufb2b - : "שּׂ" # Ufb2d - : "آ" # U622 - : "أ" # U623 - : "ؤ" # U624 - : "ئ" # U626 - : "ۂ" # U6c2 - : "ۓ" # U6d3 - : "ۀ" # U6c0 - : "إ" # U625 - : "§" # Ua7 - : "₽" # U20bd - : "€" # U20ac - : "№" # U2116 - : "№" # U2116 - : "€" # U20ac - : "₽" # U20bd - : "Ά" # U386 - : "Έ" # U388 - : "Ή" # U389 - : "Ϊ" # U3aa - : "Ί" # U38a - : "Ό" # U38c - : "Ϋ" # U3ab - : "Ύ" # U38e - : "Ώ" # U38f - : "ά" # U3ac - : "έ" # U3ad - : "ή" # U3ae - : "ϊ" # U3ca - : "ί" # U3af : "ᾍ" # U1f8d : "ᾝ" # U1f9d : "ᾭ" # U1fad @@ -3666,21 +4755,6 @@ : "ᾄ" # U1f84 : "ᾔ" # U1f94 : "ᾤ" # U1fa4 - : "ᾴ" # U1fb4 - : "ῄ" # U1fc4 - : "ῴ" # U1ff4 - : "ᾄ" # U1f84 - : "ᾅ" # U1f85 - : "ᾌ" # U1f8c - : "ᾍ" # U1f8d - : "ᾔ" # U1f94 - : "ᾕ" # U1f95 - : "ᾜ" # U1f9c - : "ᾝ" # U1f9d - : "ᾤ" # U1fa4 - : "ᾥ" # U1fa5 - : "ᾬ" # U1fac - : "ᾭ" # U1fad : "ᾌ" # U1f8c : "ᾜ" # U1f9c : "ᾬ" # U1fac @@ -3693,18 +4767,6 @@ : "ᾅ" # U1f85 : "ᾕ" # U1f95 : "ᾥ" # U1fa5 - : "ᾉ" # U1f89 - : "ᾙ" # U1f99 - : "ᾩ" # U1fa9 - : "ᾁ" # U1f81 - : "ᾑ" # U1f91 - : "ᾡ" # U1fa1 - : "ᾈ" # U1f88 - : "ᾘ" # U1f98 - : "ᾨ" # U1fa8 - : "ᾀ" # U1f80 - : "ᾐ" # U1f90 - : "ᾠ" # U1fa0 : "ᾋ" # U1f8b : "ᾛ" # U1f9b : "ᾫ" # U1fab @@ -3717,21 +4779,6 @@ : "ᾂ" # U1f82 : "ᾒ" # U1f92 : "ᾢ" # U1fa2 - : "ᾲ" # U1fb2 - : "ῂ" # U1fc2 - : "ῲ" # U1ff2 - : "ᾂ" # U1f82 - : "ᾃ" # U1f83 - : "ᾊ" # U1f8a - : "ᾋ" # U1f8b - : "ᾒ" # U1f92 - : "ᾓ" # U1f93 - : "ᾚ" # U1f9a - : "ᾛ" # U1f9b - : "ᾢ" # U1fa2 - : "ᾣ" # U1fa3 - : "ᾪ" # U1faa - : "ᾫ" # U1fab : "ᾊ" # U1f8a : "ᾚ" # U1f9a : "ᾪ" # U1faa @@ -3756,21 +4803,6 @@ : "ᾆ" # U1f86 : "ᾖ" # U1f96 : "ᾦ" # U1fa6 - : "ᾷ" # U1fb7 - : "ῇ" # U1fc7 - : "ῷ" # U1ff7 - : "ᾆ" # U1f86 - : "ᾇ" # U1f87 - : "ᾎ" # U1f8e - : "ᾏ" # U1f8f - : "ᾖ" # U1f96 - : "ᾗ" # U1f97 - : "ᾞ" # U1f9e - : "ᾟ" # U1f9f - : "ᾦ" # U1fa6 - : "ᾧ" # U1fa7 - : "ᾮ" # U1fae - : "ᾯ" # U1faf : "ᾎ" # U1f8e : "ᾞ" # U1f9e : "ᾮ" # U1fae @@ -3795,21 +4827,6 @@ : "ᾄ" # U1f84 : "ᾔ" # U1f94 : "ᾤ" # U1fa4 - : "ᾴ" # U1fb4 - : "ῄ" # U1fc4 - : "ῴ" # U1ff4 - : "ᾄ" # U1f84 - : "ᾅ" # U1f85 - : "ᾌ" # U1f8c - : "ᾍ" # U1f8d - : "ᾔ" # U1f94 - : "ᾕ" # U1f95 - : "ᾜ" # U1f9c - : "ᾝ" # U1f9d - : "ᾤ" # U1fa4 - : "ᾥ" # U1fa5 - : "ᾬ" # U1fac - : "ᾭ" # U1fad : "ᾌ" # U1f8c : "ᾜ" # U1f9c : "ᾬ" # U1fac @@ -3822,69 +4839,6 @@ : "ᾅ" # U1f85 : "ᾕ" # U1f95 : "ᾥ" # U1fa5 - : "ᾴ" # U1fb4 - : "ῄ" # U1fc4 - : "ῴ" # U1ff4 - : "ᾼ" # U1fbc - : "ῌ" # U1fcc - : "ῼ" # U1ffc - : "ᾳ" # U1fb3 - : "ῃ" # U1fc3 - : "ῳ" # U1ff3 - : "ᾀ" # U1f80 - : "ᾁ" # U1f81 - : "ᾂ" # U1f82 - : "ᾃ" # U1f83 - : "ᾄ" # U1f84 - : "ᾅ" # U1f85 - : "ᾆ" # U1f86 - : "ᾇ" # U1f87 - : "ᾈ" # U1f88 - : "ᾉ" # U1f89 - : "ᾊ" # U1f8a - : "ᾋ" # U1f8b - : "ᾌ" # U1f8c - : "ᾍ" # U1f8d - : "ᾎ" # U1f8e - : "ᾏ" # U1f8f - : "ᾐ" # U1f90 - : "ᾑ" # U1f91 - : "ᾒ" # U1f92 - : "ᾓ" # U1f93 - : "ᾔ" # U1f94 - : "ᾕ" # U1f95 - : "ᾖ" # U1f96 - : "ᾗ" # U1f97 - : "ᾘ" # U1f98 - : "ᾙ" # U1f99 - : "ᾚ" # U1f9a - : "ᾛ" # U1f9b - : "ᾜ" # U1f9c - : "ᾝ" # U1f9d - : "ᾞ" # U1f9e - : "ᾟ" # U1f9f - : "ᾠ" # U1fa0 - : "ᾡ" # U1fa1 - : "ᾢ" # U1fa2 - : "ᾣ" # U1fa3 - : "ᾤ" # U1fa4 - : "ᾥ" # U1fa5 - : "ᾦ" # U1fa6 - : "ᾧ" # U1fa7 - : "ᾨ" # U1fa8 - : "ᾩ" # U1fa9 - : "ᾪ" # U1faa - : "ᾫ" # U1fab - : "ᾬ" # U1fac - : "ᾭ" # U1fad - : "ᾮ" # U1fae - : "ᾯ" # U1faf - : "ᾲ" # U1fb2 - : "ῂ" # U1fc2 - : "ῲ" # U1ff2 - : "ᾷ" # U1fb7 - : "ῇ" # U1fc7 - : "ῷ" # U1ff7 : "ᾋ" # U1f8b : "ᾛ" # U1f9b : "ᾫ" # U1fab @@ -3897,21 +4851,6 @@ : "ᾂ" # U1f82 : "ᾒ" # U1f92 : "ᾢ" # U1fa2 - : "ᾲ" # U1fb2 - : "ῂ" # U1fc2 - : "ῲ" # U1ff2 - : "ᾂ" # U1f82 - : "ᾃ" # U1f83 - : "ᾊ" # U1f8a - : "ᾋ" # U1f8b - : "ᾒ" # U1f92 - : "ᾓ" # U1f93 - : "ᾚ" # U1f9a - : "ᾛ" # U1f9b - : "ᾢ" # U1fa2 - : "ᾣ" # U1fa3 - : "ᾪ" # U1faa - : "ᾫ" # U1fab : "ᾊ" # U1f8a : "ᾚ" # U1f9a : "ᾪ" # U1faa @@ -3936,21 +4875,6 @@ : "ᾄ" # U1f84 : "ᾔ" # U1f94 : "ᾤ" # U1fa4 - : "ᾴ" # U1fb4 - : "ῄ" # U1fc4 - : "ῴ" # U1ff4 - : "ᾄ" # U1f84 - : "ᾅ" # U1f85 - : "ᾌ" # U1f8c - : "ᾍ" # U1f8d - : "ᾔ" # U1f94 - : "ᾕ" # U1f95 - : "ᾜ" # U1f9c - : "ᾝ" # U1f9d - : "ᾤ" # U1fa4 - : "ᾥ" # U1fa5 - : "ᾬ" # U1fac - : "ᾭ" # U1fad : "ᾌ" # U1f8c : "ᾜ" # U1f9c : "ᾬ" # U1fac @@ -3975,21 +4899,6 @@ : "ᾆ" # U1f86 : "ᾖ" # U1f96 : "ᾦ" # U1fa6 - : "ᾷ" # U1fb7 - : "ῇ" # U1fc7 - : "ῷ" # U1ff7 - : "ᾆ" # U1f86 - : "ᾇ" # U1f87 - : "ᾎ" # U1f8e - : "ᾏ" # U1f8f - : "ᾖ" # U1f96 - : "ᾗ" # U1f97 - : "ᾞ" # U1f9e - : "ᾟ" # U1f9f - : "ᾦ" # U1fa6 - : "ᾧ" # U1fa7 - : "ᾮ" # U1fae - : "ᾯ" # U1faf : "ᾎ" # U1f8e : "ᾞ" # U1f9e : "ᾮ" # U1fae @@ -4001,478 +4910,4 @@ : "ᾯ" # U1faf : "ᾇ" # U1f87 : "ᾗ" # U1f97 - : "ᾈ" # U1f88 - : "ᾘ" # U1f98 - : "ᾨ" # U1fa8 - : "ᾀ" # U1f80 - : "ᾐ" # U1f90 - : "ᾠ" # U1fa0 - : "ᾉ" # U1f89 - : "ᾙ" # U1f99 - : "ᾩ" # U1fa9 - : "ᾁ" # U1f81 - : "ᾑ" # U1f91 - : "ᾡ" # U1fa1 - : "ό" # U3cc - : "ϋ" # U3cb - : "ύ" # U3cd - : "ώ" # U3ce - : "≰" # U2270 - : "≱" # U2271 - : "≇" # U2247 - : "≢" # U2262 - : "⊄" # U2284 - : "⊅" # U2285 - : "⍦" # U2366 - : "क़" # U958 - : "ख़" # U959 - : "ग़" # U95a - : "ज़" # U95b - : "ड़" # U95c - : "ढ़" # U95d - : "ऩ" # U929 - : "फ़" # U95e - : "य़" # U95f - : "ऱ" # U931 - : "ऴ" # U934 - : "ড়" # U9dc - : "ঢ়" # U9dd - : "য়" # U9df - : "ো" # U9cb - : "ৌ" # U9cc - : "ਖ਼" # Ua59 - : "ਗ਼" # Ua5a - : "ਜ਼" # Ua5b - : "ਫ਼" # Ua5e - : "ਲ਼" # Ua33 - : "ਸ਼" # Ua36 - : "⍟" # U235f - : "⊖" # U2296 - : "⊙" # U2299 - : "⍉" # U2349 - : "⍜" # U235c - : "⌽" # U233d - : "⍥" # U2365 - : "⌾" # U233e - : "⌼" # U233c - : "ଡ଼" # Ub5c - : "ଢ଼" # Ub5d - : "ୋ" # Ub4b - : "ୈ" # Ub48 - : "ୌ" # Ub4c - : "≮" # U226e - : "≯" # U226f - : "⍊" # U234a - : "⌶" # U2336 - : "⍎" # U234e - : "₍" # U208d - : "₎" # U208e - : "₊" # U208a - : "₀" # U2080 - : "₁" # U2081 - : "₂" # U2082 - : "₃" # U2083 - : "₄" # U2084 - : "₅" # U2085 - : "₆" # U2086 - : "₇" # U2087 - : "₈" # U2088 - : "₉" # U2089 - : "₌" # U208c - : "ொ" # Ubca - : "ௌ" # Ubcc - : "₋" # U208b - : "₂" # U2082 - : "₊" # U208a - : "₀" # U2080 - : "₁" # U2081 - : "₂" # U2082 - : "₃" # U2083 - : "₄" # U2084 - : "₅" # U2085 - : "₆" # U2086 - : "₇" # U2087 - : "₈" # U2088 - : "₉" # U2089 - : "₌" # U208c - : "ோ" # Ubcb - : "⍡" # U2361 - : "⍑" # U2351 - : "⌶" # U2336 - : "⍕" # U2355 - : "ஔ" # Ub94 - : "⊅" # U2285 - : "⊄" # U2284 - : "⊬" # U22ac - : "ై" # Uc48 - : "ೀ" # Ucc0 - : "ೊ" # Ucca - : "ೇ" # Ucc7 - : "ೈ" # Ucc8 - : "ೋ" # Uccb - : "ൊ" # Ud4a - : "ൌ" # Ud4c - : "ോ" # Ud4b - : "ේ" # Udda - : "ො" # Uddc - : "ෞ" # Udde - : "ෝ" # Uddd - : "ཱི" # Uf73 - : "ཱུ" # Uf75 - : "ཱྀ" # Uf81 - : "ྐྵ" # Ufb9 - : "ྒྷ" # Uf93 - : "ྜྷ" # Uf9d - : "ྡྷ" # Ufa2 - : "ྦྷ" # Ufa7 - : "ྫྷ" # Ufac - : "ྲྀ" # Uf76 - : "ླྀ" # Uf78 - : "ཀྵ" # Uf69 - : "གྷ" # Uf43 - : "ཌྷ" # Uf4d - : "དྷ" # Uf52 - : "བྷ" # Uf57 - : "ཛྷ" # Uf5c - : "ဦ" # U1026 - : "ᄁ" # U1101 - : "ᄓ" # U1113 - : "ᄔ" # U1114 - : "ᄕ" # U1115 - : "ᄖ" # U1116 - : "ᄗ" # U1117 - : "ᄄ" # U1104 - : "ᄘ" # U1118 - : "ᄙ" # U1119 - : "ᄛ" # U111b - : "ᄚ" # U111a - : "ᄜ" # U111c - : "ᄝ" # U111d - : "ᄞ" # U111e - : "ᄟ" # U111f - : "ᄠ" # U1120 - : "ᄈ" # U1108 - : "ᄡ" # U1121 - : "ᄥ" # U1125 - : "ᄫ" # U112b - : "ᄧ" # U1127 - : "ᄨ" # U1128 - : "ᄩ" # U1129 - : "ᄪ" # U112a - : "ᄬ" # U112c - : "ᄢ" # U1122 - : "ᄣ" # U1123 - : "ᄤ" # U1124 - : "ᄦ" # U1126 - : "ᄬ" # U112c - : "ᄭ" # U112d - : "ᄮ" # U112e - : "ᄯ" # U112f - : "ᄰ" # U1130 - : "ᄱ" # U1131 - : "ᄲ" # U1132 - : "ᄊ" # U110a - : "ᄴ" # U1134 - : "ᄵ" # U1135 - : "ᄶ" # U1136 - : "ᄷ" # U1137 - : "ᄸ" # U1138 - : "ᄹ" # U1139 - : "ᄺ" # U113a - : "ᄻ" # U113b - : "ᄳ" # U1133 - : "ᄴ" # U1134 - : "ᅁ" # U1141 - : "ᅂ" # U1142 - : "ᅃ" # U1143 - : "ᅄ" # U1144 - : "ᅅ" # U1145 - : "ᅇ" # U1147 - : "ᅈ" # U1148 - : "ᅉ" # U1149 - : "ᅊ" # U114a - : "ᅋ" # U114b - : "ᅆ" # U1146 - : "ᅍ" # U114d - : "ᄍ" # U110d - : "ᅒ" # U1152 - : "ᅓ" # U1153 - : "ᅖ" # U1156 - : "ᅗ" # U1157 - : "ᅘ" # U1158 - : "ᄢ" # U1122 - : "ᄣ" # U1123 - : "ᄤ" # U1124 - : "ᄥ" # U1125 - : "ᄦ" # U1126 - : "ᄳ" # U1133 - : "ᄽ" # U113d - : "ᄿ" # U113f - : "ᅏ" # U114f - : "ᅑ" # U1151 - : "ᅶ" # U1176 - : "ᅷ" # U1177 - : "ᅢ" # U1162 - : "ᅸ" # U1178 - : "ᅹ" # U1179 - : "ᅤ" # U1164 - : "ᅺ" # U117a - : "ᅻ" # U117b - : "ᅼ" # U117c - : "ᅦ" # U1166 - : "ᅽ" # U117d - : "ᅾ" # U117e - : "ᅨ" # U1168 - : "ᅪ" # U116a - : "ᅫ" # U116b - : "ᅿ" # U117f - : "ᆀ" # U1180 - : "ᆁ" # U1181 - : "ᆂ" # U1182 - : "ᆃ" # U1183 - : "ᅬ" # U116c - : "ᅫ" # U116b - : "ᆄ" # U1184 - : "ᆅ" # U1185 - : "ᆆ" # U1186 - : "ᆇ" # U1187 - : "ᆈ" # U1188 - : "ᆉ" # U1189 - : "ᆊ" # U118a - : "ᅯ" # U116f - : "ᅰ" # U1170 - : "ᆌ" # U118c - : "ᆍ" # U118d - : "ᅱ" # U1171 - : "ᆋ" # U118b - : "ᆋ" # U118b - : "ᅰ" # U1170 - : "ᆎ" # U118e - : "ᆏ" # U118f - : "ᆐ" # U1190 - : "ᆑ" # U1191 - : "ᆒ" # U1192 - : "ᆓ" # U1193 - : "ᆔ" # U1194 - : "ᆕ" # U1195 - : "ᆖ" # U1196 - : "ᅴ" # U1174 - : "ᆗ" # U1197 - : "ᆘ" # U1198 - : "ᆙ" # U1199 - : "ᆚ" # U119a - : "ᆛ" # U119b - : "ᆜ" # U119c - : "ᆝ" # U119d - : "ᆟ" # U119f - : "ᆠ" # U11a0 - : "ᆡ" # U11a1 - : "ᆢ" # U11a2 - : "ᆩ" # U11a9 - : "ᇃ" # U11c3 - : "ᆪ" # U11aa - : "ᇄ" # U11c4 - : "ᇄ" # U11c4 - : "ᇅ" # U11c5 - : "ᇆ" # U11c6 - : "ᇇ" # U11c7 - : "ᆬ" # U11ac - : "ᇉ" # U11c9 - : "ᆭ" # U11ad - : "ᇈ" # U11c8 - : "ᇊ" # U11ca - : "ᇋ" # U11cb - : "ᆰ" # U11b0 - : "ᇌ" # U11cc - : "ᇍ" # U11cd - : "ᇎ" # U11ce - : "ᇐ" # U11d0 - : "ᆱ" # U11b1 - : "ᆲ" # U11b2 - : "ᇓ" # U11d3 - : "ᆳ" # U11b3 - : "ᇖ" # U11d6 - : "ᇘ" # U11d8 - : "ᆴ" # U11b4 - : "ᆵ" # U11b5 - : "ᆶ" # U11b6 - : "ᇑ" # U11d1 - : "ᇒ" # U11d2 - : "ᇔ" # U11d4 - : "ᇕ" # U11d5 - : "ᇗ" # U11d7 - : "ᇙ" # U11d9 - : "ᇌ" # U11cc - : "ᇑ" # U11d1 - : "ᇒ" # U11d2 - : "ᇓ" # U11d3 - : "ᇕ" # U11d5 - : "ᇔ" # U11d4 - : "ᇖ" # U11d6 - : "ᇚ" # U11da - : "ᇛ" # U11db - : "ᇜ" # U11dc - : "ᇝ" # U11dd - : "ᇞ" # U11de - : "ᇢ" # U11e2 - : "ᇠ" # U11e0 - : "ᇡ" # U11e1 - : "ᇟ" # U11df - : "ᇣ" # U11e3 - : "ᆹ" # U11b9 - : "ᇦ" # U11e6 - : "ᇤ" # U11e4 - : "ᇥ" # U11e5 - : "ᇧ" # U11e7 - : "ᇨ" # U11e8 - : "ᇩ" # U11e9 - : "ᇪ" # U11ea - : "ᆻ" # U11bb - : "ᇬ" # U11ec - : "ᇭ" # U11ed - : "ᇮ" # U11ee - : "ᇯ" # U11ef - : "ᇳ" # U11f3 - : "ᇴ" # U11f4 - : "ᇵ" # U11f5 - : "ᇶ" # U11f6 - : "ᇷ" # U11f7 - : "ᇸ" # U11f8 - : "ᇏ" # U11cf - : "ᇞ" # U11de - : "ᇭ" # U11ed - : "ᇱ" # U11f1 - : "ᇲ" # U11f2 - : "῎" # U1fce - : "῍" # U1fcd - : "῏" # U1fcf - : "῎" # U1fce - : "῍" # U1fcd - : "῎" # U1fce - : "῏" # U1fcf - : "῞" # U1fde - : "῝" # U1fdd - : "῟" # U1fdf - : "῞" # U1fde - : "῝" # U1fdd - : "῞" # U1fde - : "῟" # U1fdf - : "⍅" # U2345 - : "⍇" # U2347 - : "⍏" # U234f - : "⍐" # U2350 - : "⍆" # U2346 - : "⍈" # U2348 - : "⍖" # U2356 - : "⍗" # U2357 - : "∄" # U2204 - : "⍙" # U2359 - : "⍋" # U234b - : "⍍" # U234d - : "⍒" # U2352 - : "⍫" # U236b - : "⍢" # U2362 - : "⍔" # U2354 - : "∉" # U2209 - : "⍷" # U2377 - : "∌" # U220c - : "⍛" # U235b - : "⍤" # U2364 - : "⌾" # U233e - : "⍎" # U234e - : "⍕" # U2355 - : "⍝" # U235d - : "⌻" # U233b - : "∤" # U2224 - : "∦" # U2226 - : "⍲" # U2372 - : "⋄" # U22c4 - : "⍓" # U2353 - : "⍱" # U2371 - : "⋄" # U22c4 - : "⍌" # U234c - : "⍝" # U235d - : "≁" # U2241 - : "≄" # U2244 - : "≉" # U2249 - : "≭" # U226d - : "≢" # U2262 - : "⍯" # U236f - : "≴" # U2274 - : "≵" # U2275 - : "≸" # U2278 - : "≹" # U2279 - : "⊀" # U2280 - : "⊁" # U2281 - : "⋠" # U22e0 - : "⋡" # U22e1 - : "⊆" # U2286 - : "⍧" # U2367 - : "⊇" # U2287 - : "⊈" # U2288 - : "⊉" # U2289 - : "⋢" # U22e2 - : "⋣" # U22e3 - : "⊭" # U22ad - : "⊮" # U22ae - : "⊯" # U22af - : "⋪" # U22ea - : "⋫" # U22eb - : "⋬" # U22ec - : "⋭" # U22ed - : "⍚" # U235a - : "⌺" # U233a - : "⍸" # U2378 - : "⍹" # U2379 - : "⍶" # U2376 - : "⍞" # U235e - : "⍁" # U2341 - : "⍠" # U2360 - : "⍃" # U2343 - : "⌸" # U2338 - : "⍄" # U2344 - : "⍰" # U2370 - : "⍂" # U2342 - : "⌹" # U2339 - : "⌼" # U233c - : "⍇" # U2347 - : "⍐" # U2350 - : "⍈" # U2348 - : "⍗" # U2357 - : "⍍" # U234d - : "⍔" # U2354 - : "⌻" # U233b - : "⍓" # U2353 - : "⍌" # U234c - : "⍯" # U236f - : "⌺" # U233a - : "⫝̸" # U2adc - : "ẛ" # U1e9b - : "Đ" # U110 - : "Ǥ" # U1e4 - : "Ħ" # U126 - : "Ɨ" # U197 - : "Ł" # U141 - : "Ø" # Ud8 - : "Ŧ" # U166 - : "Ƶ" # U1b5 - : "ƀ" # U180 - : "đ" # U111 - : "ǥ" # U1e5 - : "ħ" # U127 - : "ɨ" # U268 - : "ł" # U142 - : "ø" # Uf8 - : "ŧ" # U167 - : "ƶ" # U1b6 - : "ʡ" # U2a1 - : "Ұ" # U4b0 - : "ұ" # U4b1 - : "ғ" # U493 - : "ҟ" # U49f - : "Ғ" # U492 - : "Ҟ" # U49e - : "↚" # U219a - : "↛" # U219b - : "↮" # U21ae - : "≠" # U2260 + : "ᾧ" # U1fa7 diff --git a/testsuite/gtk/composetable.c b/testsuite/gtk/composetable.c index f2875c46c1..23a95b0d27 100644 --- a/testsuite/gtk/composetable.c +++ b/testsuite/gtk/composetable.c @@ -1,6 +1,8 @@ #include #include +#include + #include "../gtk/gtkcomposetable.h" #include "../gtk/gtkimcontextsimpleseqs.h" #include "testsuite/testutils.h" @@ -33,43 +35,59 @@ append_escaped (GString *str, } } +static void +print_sequence (gunichar *sequence, + int len, + const char *value, + gpointer data) +{ + GString *str = data; + + for (int j = 0; j < len; j++) + g_string_append_printf (str, " ", sequence[j]); + + g_string_append (str, ": \""); + append_escaped (str, value); + g_string_append (str, "\""); + + if (g_utf8_strlen (value, -1) == 1) + { + gunichar ch = g_utf8_get_char (value); + g_string_append_printf (str, " # U%x", ch); + } + + g_string_append_c (str, '\n'); +} + static char * gtk_compose_table_print (GtkComposeTable *table) { - int i, j; - guint16 *seq; GString *str; str = g_string_new (""); - g_string_append_printf (str, "# n_seqs: %d\n# max_seq_len: %d\n", - table->n_seqs, - table->max_seq_len); + g_string_append_printf (str, "# max_seq_len: %d\n# n_index_size: %d\n# data_size: %d\n# n_chars: %d\n", + table->max_seq_len, + table->n_index_size, + table->data_size, + table->n_chars); - for (i = 0, seq = table->data; i < table->n_seqs; i++, seq += table->max_seq_len + 2) - { - gunichar value; - char buf[8] = { 0 }; +#if 0 + int index_stride = table->max_seq_len + 1; - for (j = 0; j < table->max_seq_len; j++) - g_string_append_printf (str, " ", seq[j]); + for (int idx = 0; idx < table->n_index_size; idx++) + { + const guint16 *seq_index = table->data + (idx * index_stride); - value = (seq[table->max_seq_len] << 16) | seq[table->max_seq_len + 1]; - if ((value & (1 << 31)) != 0) - { - const char *out = &table->char_data[value & ~(1 << 31)]; - - g_string_append (str, ": \""); - append_escaped (str, out); - g_string_append (str, "\"\n"); - } - else - { - g_unichar_to_utf8 (value, buf); - g_string_append_printf (str, ": \"%s\" # U%x\n", buf, value); - } + g_print ("", seq_index[0]); + for (int i = 1; i < index_stride; i++) + g_print (" %d", seq_index[i]); + g_print ("\n"); } +#endif + + gtk_compose_table_foreach (table, print_sequence, str); return g_string_free (str, FALSE); } @@ -80,7 +98,7 @@ generate_output (const char *file) GtkComposeTable *table; char *output; - table = gtk_compose_table_new_with_file (file); + table = gtk_compose_table_parse (file); output = gtk_compose_table_print (table); g_print ("%s", output); @@ -97,12 +115,12 @@ compose_table_compare (gconstpointer data) char *diff; GError *error = NULL; - file = g_build_filename (g_test_get_dir (G_TEST_DIST), "compose", basename, NULL); + file = g_test_build_filename (G_TEST_DIST, "compose", basename, NULL); expected = g_strconcat (file, ".expected", NULL); - table = gtk_compose_table_new_with_file (file); - + table = gtk_compose_table_parse (file); output = gtk_compose_table_print (table); + diff = diff_with_file (expected, output, -1, &error); g_assert_no_error (error); @@ -125,9 +143,9 @@ compose_table_cycle (void) char *file; GtkComposeTable *table; - file = g_build_filename (g_test_get_dir (G_TEST_DIST), "compose", "cycle", NULL); + file = g_test_build_filename (G_TEST_DIST, "compose", "cycle", NULL); - table = gtk_compose_table_new_with_file (file); + table = gtk_compose_table_parse (file); g_assert_nonnull (table); g_free (file); @@ -149,7 +167,7 @@ compose_table_nofile (void) file = g_build_filename (g_test_get_dir (G_TEST_DIST), "compose", "nofile", NULL); - table = gtk_compose_table_new_with_file (file); + table = gtk_compose_table_parse (file); g_assert_nonnull (table); g_free (file); @@ -175,7 +193,7 @@ compose_table_match (void) file = g_build_filename (g_test_get_dir (G_TEST_DIST), "compose", "match", NULL); - table = gtk_compose_table_new_with_file (file); + table = gtk_compose_table_parse (file); buffer[0] = GDK_KEY_Multi_key; buffer[1] = 0; @@ -229,39 +247,38 @@ compose_table_match (void) g_free (file); } +extern const GtkComposeTable builtin_compose_table; + /* just check some random sequences */ static void -compose_table_match_compact (void) +compose_table_match_builtin (void) { - const GtkComposeTableCompact table = { - gtk_compose_seqs_compact, - 5, - 30, - 6 - }; + const GtkComposeTable *table = &builtin_compose_table; guint16 buffer[8] = { 0, }; gboolean finish, match, ret; - gunichar ch; + GString *s; buffer[0] = GDK_KEY_Multi_key; buffer[1] = 0; - ret = gtk_compose_table_compact_check (&table, buffer, 1, &finish, &match, &ch); + s = g_string_new (""); + + ret = gtk_compose_table_check (table, buffer, 1, &finish, &match, s); g_assert_true (ret); g_assert_false (finish); g_assert_false (match); - g_assert_true (ch == 0); + g_assert_true (s->len == 0); buffer[0] = GDK_KEY_a; buffer[1] = GDK_KEY_b; buffer[2] = GDK_KEY_c; buffer[3] = 0; - ret = gtk_compose_table_compact_check (&table, buffer, 3, &finish, &match, &ch); + ret = gtk_compose_table_check (table, buffer, 3, &finish, &match, s); g_assert_false (ret); g_assert_false (finish); g_assert_false (match); - g_assert_true (ch == 0); + g_assert_true (s->len == 0); buffer[0] = GDK_KEY_Multi_key; buffer[1] = GDK_KEY_parenleft; @@ -269,31 +286,37 @@ compose_table_match_compact (void) buffer[3] = GDK_KEY_parenright; buffer[4] = 0; - ret = gtk_compose_table_compact_check (&table, buffer, 4, &finish, &match, &ch); + ret = gtk_compose_table_check (table, buffer, 4, &finish, &match, s); g_assert_true (ret); g_assert_true (finish); g_assert_true (match); - g_assert_true (ch == 0x24d9); /* CIRCLED LATIN SMALL LETTER J */ + g_assert_cmpstr (s->str, ==, "ⓙ"); /* CIRCLED LATIN SMALL LETTER J */ buffer[0] = GDK_KEY_dead_acute; buffer[1] = GDK_KEY_space; buffer[2] = 0; - ret = gtk_compose_table_compact_check (&table, buffer, 2, &finish, &match, &ch); + g_string_set_size (s, 0); + + ret = gtk_compose_table_check (table, buffer, 2, &finish, &match, s); g_assert_true (ret); g_assert_true (finish); g_assert_true (match); - g_assert_true (ch == 0x27); + g_assert_cmpstr (s->str, ==, "'"); buffer[0] = GDK_KEY_dead_acute; buffer[1] = GDK_KEY_dead_acute; buffer[2] = 0; - ret = gtk_compose_table_compact_check (&table, buffer, 2, &finish, &match, &ch); + g_string_set_size (s, 0); + + ret = gtk_compose_table_check (table, buffer, 2, &finish, &match, s); g_assert_true (ret); g_assert_true (finish); g_assert_true (match); - g_assert_true (ch == 0xb4); + g_assert_cmpstr (s->str, ==, "´"); + + g_string_free (s, TRUE); } static void @@ -381,16 +404,16 @@ match_algorithmic (void) int main (int argc, char *argv[]) { - char *dir; - - g_setenv ("LC_ALL", "en_US.UTF-8", TRUE); - dir = g_dir_make_tmp ("composetableXXXXXX", NULL); - g_setenv ("XDG_CACHE_HOME", dir, TRUE); - g_free (dir); - if (argc == 3 && strcmp (argv[1], "--generate") == 0) { - setlocale (LC_ALL, ""); + gtk_disable_setlocale(); + setlocale (LC_ALL, "en_US.UTF-8"); + + gtk_init (); + + /* Ensure that the builtin table is initialized */ + GtkIMContext *ctx = gtk_im_context_simple_new (); + g_object_unref (ctx); generate_output (argv[2]); return 0; @@ -398,6 +421,10 @@ main (int argc, char *argv[]) gtk_test_init (&argc, &argv, NULL); + /* Ensure that the builtin table is initialized */ + GtkIMContext *ctx = gtk_im_context_simple_new (); + g_object_unref (ctx); + g_test_add_data_func ("/compose-table/basic", "basic", compose_table_compare); g_test_add_data_func ("/compose-table/long", "long", compose_table_compare); g_test_add_data_func ("/compose-table/octal", "octal", compose_table_compare); @@ -410,7 +437,7 @@ main (int argc, char *argv[]) g_test_add_func ("/compose-table/include-cycle", compose_table_cycle); g_test_add_func ("/compose-table/include-nofile", compose_table_nofile); g_test_add_func ("/compose-table/match", compose_table_match); - g_test_add_func ("/compose-table/match-compact", compose_table_match_compact); + g_test_add_func ("/compose-table/match-builtin", compose_table_match_builtin); g_test_add_func ("/compose-table/match-algorithmic", match_algorithmic); return g_test_run (); -- 2.30.2